mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-19 19:13:22 +08:00
Compare commits
83 Commits
0.3.4.1
...
0.3.4.15_1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
98980c4414 | ||
![]() |
bd66633136 | ||
![]() |
eeabea3f8d | ||
![]() |
29a0fc0c09 | ||
![]() |
22cf84b27e | ||
![]() |
8bd990fcf6 | ||
![]() |
6e966b96be | ||
![]() |
8167656e04 | ||
![]() |
cf27e9072d | ||
![]() |
fe85b1e6a5 | ||
![]() |
46382d24fa | ||
![]() |
7bc86e0c53 | ||
![]() |
5bfa947185 | ||
![]() |
c36dafa380 | ||
![]() |
d8f99d73e8 | ||
![]() |
33787db547 | ||
![]() |
cccc1103b1 | ||
![]() |
dfb935f3f8 | ||
![]() |
fce592816d | ||
![]() |
f9a0361d85 | ||
![]() |
af9127d5d5 | ||
![]() |
25fbe8a6f6 | ||
![]() |
fcf6d9927b | ||
![]() |
eb6b11a55d | ||
![]() |
b2d7e2d7dc | ||
![]() |
52463eb340 | ||
![]() |
0f0c5667df | ||
![]() |
be01beb07f | ||
![]() |
ad341bee9f | ||
![]() |
a447202c6a | ||
![]() |
c8d153a1d4 | ||
![]() |
0a1fc9bee3 | ||
![]() |
b17ac9dd05 | ||
![]() |
897b7fc82d | ||
![]() |
1af548beda | ||
![]() |
d68a9d82de | ||
![]() |
c0943dd033 | ||
![]() |
e22b4cd38a | ||
![]() |
a99b758dd9 | ||
![]() |
15a99d60de | ||
![]() |
490730dabc | ||
![]() |
85028a9a1b | ||
![]() |
7d9b0faffa | ||
![]() |
0450a3abdf | ||
![]() |
a0f0905cf9 | ||
![]() |
4de8114c3e | ||
![]() |
c28dac3979 | ||
![]() |
b5f56b61c9 | ||
![]() |
a3da177dc1 | ||
![]() |
badd9762a3 | ||
![]() |
10344dbd09 | ||
![]() |
852908bb40 | ||
![]() |
daaa04a5a4 | ||
![]() |
c23cea4249 | ||
![]() |
dbbc41c16c | ||
![]() |
d5f4f146b1 | ||
![]() |
924c31a9e0 | ||
![]() |
3ab64bdc85 | ||
![]() |
5d5e634ace | ||
![]() |
ee03c669ae | ||
![]() |
11e38853dc | ||
![]() |
eaa9877096 | ||
![]() |
babc6c691a | ||
![]() |
89d5c3e5f9 | ||
![]() |
877968ca92 | ||
![]() |
5d57560ec5 | ||
![]() |
d47d70d71a | ||
![]() |
850e986a03 | ||
![]() |
56ca5c68e3 | ||
![]() |
1adbbb5811 | ||
![]() |
20a3c5904a | ||
![]() |
1420b5b1a3 | ||
![]() |
d848b61313 | ||
![]() |
86e8383463 | ||
![]() |
c6800333c3 | ||
![]() |
d1ac91ae71 | ||
![]() |
5f0d7125a4 | ||
![]() |
99b48ad0b4 | ||
![]() |
d7c18187af | ||
![]() |
fc90ccc846 | ||
![]() |
23c1376112 | ||
![]() |
b90401000a | ||
![]() |
6ba76e15e4 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.pyc
|
||||||
|
.vs
|
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -1,3 +1,3 @@
|
|||||||
[submodule "kdlibcpp"]
|
[submodule "kdlibcpp"]
|
||||||
path = kdlibcpp
|
path = kdlibcpp
|
||||||
url = https://githomelab.ru/kdlibcpp/kdlibcpp.git
|
url = https://github.com/ivellioscolin/kdlibcpp.git
|
||||||
|
45
README.md
45
README.md
@ -1,4 +1,4 @@
|
|||||||
# Pykd - python extension for WinDBG
|
# Pykd - not only python extension for WinDBG
|
||||||
|
|
||||||
## Purpose
|
## Purpose
|
||||||
This project can help to automate debugging and crash dump analysis using Python. It allows one to take the best from both worlds: the expressiveness and convenience of Python with the power of WinDbg!
|
This project can help to automate debugging and crash dump analysis using Python. It allows one to take the best from both worlds: the expressiveness and convenience of Python with the power of WinDbg!
|
||||||
@ -6,15 +6,36 @@ This project can help to automate debugging and crash dump analysis using Python
|
|||||||
## Why do I need this?
|
## Why do I need this?
|
||||||
If you want to automate the debugger but dislike the WinDbg built-in script machine syntax it's time to try again using the handy and powerful Python language. Even if you don't want to create your own script, maybe some existing scripts will be of interest to you?
|
If you want to automate the debugger but dislike the WinDbg built-in script machine syntax it's time to try again using the handy and powerful Python language. Even if you don't want to create your own script, maybe some existing scripts will be of interest to you?
|
||||||
|
|
||||||
## Pykd bootstrapper
|
## Getting started
|
||||||
Use it to run pykd within windbg. [link](https://githomelab.ru/pykd/pykd-ext)
|
* You should have installed python. Supported python: 2.7, 3.5 - 3.9
|
||||||
|
* Install pykd with command: 'pip install pykd'
|
||||||
|
* Use windbg extension (bootstrapper) to run pykd with windbg
|
||||||
|
|
||||||
## Releases:
|
## Windbg extension (bootstarpper)
|
||||||
[Last Release](/../wikis/Last Release)
|
Use it to run pykd within windbg.
|
||||||
|
[Home Page](https://githomelab.ru/pykd/pykd-ext)
|
||||||
|
[Download](https://githomelab.ru/pykd/pykd-ext/wikis/Downloads)
|
||||||
|
|
||||||
|
## Releases
|
||||||
|
Just run 'pip install pykd' to install or 'pip install pykd --upgrade' to upgrade to the last version
|
||||||
|
[PyPi](https://pypi.org/project/pykd)
|
||||||
|
[All Releases](/../wikis/All Releases)
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[Wiki Home](/../wikis/Home)
|
||||||
[User Manual](/../wikis/User Manual rus)
|
[User Manual](/../wikis/User Manual rus)
|
||||||
[API Reference](/../wikis/API Reference)
|
[API Reference](/../wikis/API Reference)
|
||||||
|
|
||||||
|
## Useful tools for pykd and WinDBG
|
||||||
|
[windbg-pack](https://githomelab.ru/pykd/windbg-pack)
|
||||||
|
Set of python scripts for WinDBG
|
||||||
|
|
||||||
|
[pykdwin](https://githomelab.ru/pykd/pykdwin)
|
||||||
|
A library with auxiliary modules for writing small pykd scripts and daily use.
|
||||||
|
|
||||||
|
[windbg-kernel](https://githomelab.ru/pykd/windbg-kernel)
|
||||||
|
Set of pykd script for kernel debugging
|
||||||
|
|
||||||
|
|
||||||
## How to build ?
|
## How to build ?
|
||||||
* install VS 2017
|
* install VS 2017
|
||||||
@ -32,4 +53,14 @@ https://git-scm.com/
|
|||||||
git clone --recurse-submodules https://githomelab.ru/pykd/pykd.git local_dir
|
git clone --recurse-submodules https://githomelab.ru/pykd/pykd.git local_dir
|
||||||
```
|
```
|
||||||
* open pykd.sln
|
* open pykd.sln
|
||||||
* choose a python version and a target platform then build pykd projects
|
* choose a python version and a target platform then build pykd projects
|
||||||
|
|
||||||
|
## Projects used pykd
|
||||||
|
[mona.py](https://github.com/corelan/mona)
|
||||||
|
the exploit writer's swiss army knife
|
||||||
|
|
||||||
|
[flare-dbg](https://github.com/fireeye/flare-dbg)
|
||||||
|
flare-dbg is a project meant to aid malware reverse engineers in rapidly developing debugger scripts.
|
||||||
|
|
||||||
|
[voltron](https://github.com/snare/voltron)
|
||||||
|
Voltron is an extensible debugger UI toolkit written in Python
|
2
kdlibcpp
2
kdlibcpp
@ -1 +1 @@
|
|||||||
Subproject commit b92e0fbcc0628b2e8dc320f79a2bb9464b8d9908
|
Subproject commit e54598d2f904acab23d340c93ce77c551a396ecb
|
150
pykd.sln
150
pykd.sln
@ -42,75 +42,126 @@ Global
|
|||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug_2.7|Win32 = Debug_2.7|Win32
|
Debug_2.7|Win32 = Debug_2.7|Win32
|
||||||
Debug_2.7|x64 = Debug_2.7|x64
|
Debug_2.7|x64 = Debug_2.7|x64
|
||||||
|
Debug_3.10|Win32 = Debug_3.10|Win32
|
||||||
|
Debug_3.10|x64 = Debug_3.10|x64
|
||||||
Debug_3.5|Win32 = Debug_3.5|Win32
|
Debug_3.5|Win32 = Debug_3.5|Win32
|
||||||
Debug_3.5|x64 = Debug_3.5|x64
|
Debug_3.5|x64 = Debug_3.5|x64
|
||||||
Debug_3.6|Win32 = Debug_3.6|Win32
|
Debug_3.6|Win32 = Debug_3.6|Win32
|
||||||
Debug_3.6|x64 = Debug_3.6|x64
|
Debug_3.6|x64 = Debug_3.6|x64
|
||||||
Debug_3.7|Win32 = Debug_3.7|Win32
|
Debug_3.7|Win32 = Debug_3.7|Win32
|
||||||
Debug_3.7|x64 = Debug_3.7|x64
|
Debug_3.7|x64 = Debug_3.7|x64
|
||||||
|
Debug_3.8|Win32 = Debug_3.8|Win32
|
||||||
|
Debug_3.8|x64 = Debug_3.8|x64
|
||||||
|
Debug_3.9|Win32 = Debug_3.9|Win32
|
||||||
|
Debug_3.9|x64 = Debug_3.9|x64
|
||||||
Release_2.7|Win32 = Release_2.7|Win32
|
Release_2.7|Win32 = Release_2.7|Win32
|
||||||
Release_2.7|x64 = Release_2.7|x64
|
Release_2.7|x64 = Release_2.7|x64
|
||||||
|
Release_3.10|Win32 = Release_3.10|Win32
|
||||||
|
Release_3.10|x64 = Release_3.10|x64
|
||||||
Release_3.5|Win32 = Release_3.5|Win32
|
Release_3.5|Win32 = Release_3.5|Win32
|
||||||
Release_3.5|x64 = Release_3.5|x64
|
Release_3.5|x64 = Release_3.5|x64
|
||||||
Release_3.6|Win32 = Release_3.6|Win32
|
Release_3.6|Win32 = Release_3.6|Win32
|
||||||
Release_3.6|x64 = Release_3.6|x64
|
Release_3.6|x64 = Release_3.6|x64
|
||||||
Release_3.7|Win32 = Release_3.7|Win32
|
Release_3.7|Win32 = Release_3.7|Win32
|
||||||
Release_3.7|x64 = Release_3.7|x64
|
Release_3.7|x64 = Release_3.7|x64
|
||||||
|
Release_3.8|Win32 = Release_3.8|Win32
|
||||||
|
Release_3.8|x64 = Release_3.8|x64
|
||||||
|
Release_3.9|Win32 = Release_3.9|Win32
|
||||||
|
Release_3.9|x64 = Release_3.9|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.Build.0 = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.Build.0 = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.10|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.10|x64.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.8|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.8|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.9|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.9|x64.ActiveCfg = Debug|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.10|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.10|x64.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.8|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.8|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.9|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.9|x64.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.10|Win32.ActiveCfg = Debug_3.10|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.10|x64.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.8|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.8|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.9|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.9|x64.ActiveCfg = Debug|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.10|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.10|x64.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.8|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.8|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.9|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.9|x64.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.10|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.10|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.6|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.6|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.7|Win32.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.7|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.8|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.8|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.9|Win32.ActiveCfg = Debug|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.9|x64.ActiveCfg = Debug|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.10|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.10|x64.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|Win32.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|x64.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.6|Win32.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.6|x64.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.7|Win32.ActiveCfg = Release|Any CPU
|
||||||
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.7|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.8|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.8|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.9|Win32.ActiveCfg = Release|Any CPU
|
||||||
|
{D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.9|x64.ActiveCfg = Release|Any CPU
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.ActiveCfg = Debug|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.ActiveCfg = Debug|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.Build.0 = Debug|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.Build.0 = Debug|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.ActiveCfg = Debug|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.ActiveCfg = Debug|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.Build.0 = Debug|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.Build.0 = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.10|Win32.ActiveCfg = Debug_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.10|x64.ActiveCfg = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.10|x64.Build.0 = Debug|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.ActiveCfg = Debug|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.ActiveCfg = Debug|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.Build.0 = Debug|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.Build.0 = Debug|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|x64.ActiveCfg = Debug|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|x64.ActiveCfg = Debug|x64
|
||||||
@ -123,10 +174,22 @@ Global
|
|||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|Win32.Build.0 = Debug|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|Win32.Build.0 = Debug|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|x64.ActiveCfg = Debug|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|x64.ActiveCfg = Debug|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|x64.Build.0 = Debug|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.7|x64.Build.0 = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.8|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.8|Win32.Build.0 = Debug|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.8|x64.ActiveCfg = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.8|x64.Build.0 = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.9|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.9|Win32.Build.0 = Debug|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.9|x64.ActiveCfg = Debug|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.9|x64.Build.0 = Debug|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.ActiveCfg = Release_Static|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.ActiveCfg = Release_Static|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.Build.0 = Release_Static|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.Build.0 = Release_Static|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.ActiveCfg = Release_Static|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.ActiveCfg = Release_Static|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.Build.0 = Release_Static|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.Build.0 = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.10|Win32.ActiveCfg = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.10|Win32.Build.0 = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.10|x64.ActiveCfg = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.10|x64.Build.0 = Release_Static|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.ActiveCfg = Release_Static|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.ActiveCfg = Release_Static|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.Build.0 = Release_Static|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.Build.0 = Release_Static|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|x64.ActiveCfg = Release_Static|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|x64.ActiveCfg = Release_Static|x64
|
||||||
@ -139,10 +202,22 @@ Global
|
|||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|Win32.Build.0 = Release_Static|Win32
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|Win32.Build.0 = Release_Static|Win32
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|x64.ActiveCfg = Release_Static|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|x64.ActiveCfg = Release_Static|x64
|
||||||
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|x64.Build.0 = Release_Static|x64
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.7|x64.Build.0 = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.8|Win32.ActiveCfg = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.8|Win32.Build.0 = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.8|x64.ActiveCfg = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.8|x64.Build.0 = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.9|Win32.ActiveCfg = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.9|Win32.Build.0 = Release_Static|Win32
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.9|x64.ActiveCfg = Release_Static|x64
|
||||||
|
{3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.9|x64.Build.0 = Release_Static|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.ActiveCfg = Debug_2.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.ActiveCfg = Debug_2.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.Build.0 = Debug_2.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.Build.0 = Debug_2.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.ActiveCfg = Debug_2.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.ActiveCfg = Debug_2.7|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.Build.0 = Debug_2.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.Build.0 = Debug_2.7|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.10|Win32.ActiveCfg = Debug_3.10|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.10|Win32.Build.0 = Debug_3.10|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.10|x64.ActiveCfg = Debug_3.10|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.10|x64.Build.0 = Debug_3.10|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.ActiveCfg = Debug_3.5|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.ActiveCfg = Debug_3.5|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.Build.0 = Debug_3.5|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.Build.0 = Debug_3.5|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|x64.ActiveCfg = Debug_3.5|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|x64.ActiveCfg = Debug_3.5|x64
|
||||||
@ -155,10 +230,22 @@ Global
|
|||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|Win32.Build.0 = Debug_3.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|Win32.Build.0 = Debug_3.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|x64.ActiveCfg = Debug_3.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|x64.ActiveCfg = Debug_3.7|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|x64.Build.0 = Debug_3.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.7|x64.Build.0 = Debug_3.7|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.8|Win32.ActiveCfg = Debug_3.8|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.8|Win32.Build.0 = Debug_3.8|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.8|x64.ActiveCfg = Debug_3.8|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.8|x64.Build.0 = Debug_3.8|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.9|Win32.ActiveCfg = Debug_3.9|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.9|Win32.Build.0 = Debug_3.9|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.9|x64.ActiveCfg = Debug_3.9|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.9|x64.Build.0 = Debug_3.9|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.ActiveCfg = Release_2.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.ActiveCfg = Release_2.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.Build.0 = Release_2.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.Build.0 = Release_2.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.ActiveCfg = Release_2.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.ActiveCfg = Release_2.7|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.Build.0 = Release_2.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.Build.0 = Release_2.7|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.10|Win32.ActiveCfg = Release_3.10|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.10|Win32.Build.0 = Release_3.10|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.10|x64.ActiveCfg = Release_3.10|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.10|x64.Build.0 = Release_3.10|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.ActiveCfg = Release_3.5|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.ActiveCfg = Release_3.5|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.Build.0 = Release_3.5|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.Build.0 = Release_3.5|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|x64.ActiveCfg = Release_3.5|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|x64.ActiveCfg = Release_3.5|x64
|
||||||
@ -171,10 +258,21 @@ Global
|
|||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|Win32.Build.0 = Release_3.7|Win32
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|Win32.Build.0 = Release_3.7|Win32
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|x64.ActiveCfg = Release_3.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|x64.ActiveCfg = Release_3.7|x64
|
||||||
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|x64.Build.0 = Release_3.7|x64
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.7|x64.Build.0 = Release_3.7|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.8|Win32.ActiveCfg = Release_3.8|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.8|Win32.Build.0 = Release_3.8|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.8|x64.ActiveCfg = Release_3.8|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.8|x64.Build.0 = Release_3.8|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.9|Win32.ActiveCfg = Release_3.9|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.9|Win32.Build.0 = Release_3.9|Win32
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.9|x64.ActiveCfg = Release_3.9|x64
|
||||||
|
{C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.9|x64.Build.0 = Release_3.9|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.ActiveCfg = Debug|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.ActiveCfg = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.Build.0 = Debug|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.ActiveCfg = Debug|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.ActiveCfg = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.Build.0 = Debug|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.Build.0 = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.10|Win32.ActiveCfg = Debug_3.10|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.10|x64.ActiveCfg = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.10|x64.Build.0 = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.ActiveCfg = Debug|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.ActiveCfg = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.Build.0 = Debug|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|x64.ActiveCfg = Debug|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|x64.ActiveCfg = Debug|x64
|
||||||
@ -187,22 +285,42 @@ Global
|
|||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|Win32.Build.0 = Debug|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|x64.ActiveCfg = Debug|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|x64.ActiveCfg = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|x64.Build.0 = Debug|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.7|x64.Build.0 = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.ActiveCfg = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.8|Win32.ActiveCfg = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.Build.0 = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.8|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.ActiveCfg = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.8|x64.ActiveCfg = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.Build.0 = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.8|x64.Build.0 = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.ActiveCfg = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.9|Win32.ActiveCfg = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.Build.0 = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.9|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.ActiveCfg = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.9|x64.ActiveCfg = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.Build.0 = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.9|x64.Build.0 = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|Win32.ActiveCfg = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.ActiveCfg = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|Win32.Build.0 = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.Build.0 = Debug|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|x64.ActiveCfg = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.ActiveCfg = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|x64.Build.0 = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.Build.0 = Debug|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|Win32.ActiveCfg = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.10|Win32.ActiveCfg = Release|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|Win32.Build.0 = Release|Win32
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.10|Win32.Build.0 = Release|Win32
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|x64.ActiveCfg = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.10|x64.ActiveCfg = Release|x64
|
||||||
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|x64.Build.0 = Release|x64
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.10|x64.Build.0 = Release|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.Build.0 = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.ActiveCfg = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.Build.0 = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|Win32.Build.0 = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|x64.ActiveCfg = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.6|x64.Build.0 = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|Win32.Build.0 = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|x64.ActiveCfg = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.7|x64.Build.0 = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.8|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.8|Win32.Build.0 = Debug|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.8|x64.ActiveCfg = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.8|x64.Build.0 = Debug|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.9|Win32.ActiveCfg = Release|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.9|Win32.Build.0 = Release|Win32
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.9|x64.ActiveCfg = Release|x64
|
||||||
|
{0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.9|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -105,7 +105,11 @@ object BOOST_PYTHON_DECL exec_file(char const *filename, object global, object l
|
|||||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||||
char *f = const_cast<char *>(filename);
|
char *f = const_cast<char *>(filename);
|
||||||
// Let python open the file to avoid potential binary incompatibilities.
|
// Let python open the file to avoid potential binary incompatibilities.
|
||||||
#if PY_VERSION_HEX >= 0x03040000
|
#if PY_VERSION_HEX >= 0x030a0000
|
||||||
|
PyObject* fo = Py_BuildValue("s", f);
|
||||||
|
FILE* fs = _Py_fopen_obj(fo, "r");
|
||||||
|
Py_DECREF(fo);
|
||||||
|
#elif PY_VERSION_HEX >= 0x03040000
|
||||||
FILE *fs = _Py_fopen(f, "r");
|
FILE *fs = _Py_fopen(f, "r");
|
||||||
#elif PY_VERSION_HEX >= 0x03000000
|
#elif PY_VERSION_HEX >= 0x03000000
|
||||||
PyObject *fo = Py_BuildValue("s", f);
|
PyObject *fo = Py_BuildValue("s", f);
|
||||||
|
@ -11,6 +11,10 @@
|
|||||||
<package id="Python35" version="3.5.1.1" targetFramework="Native" />
|
<package id="Python35" version="3.5.1.1" targetFramework="Native" />
|
||||||
<package id="Python36" version="3.6.0" targetFramework="Native" />
|
<package id="Python36" version="3.6.0" targetFramework="Native" />
|
||||||
<package id="Python37" version="1.0.0.1" targetFramework="Native" />
|
<package id="Python37" version="1.0.0.1" targetFramework="Native" />
|
||||||
|
<package id="Python38" version="3.8.0" targetFramework="Native" />
|
||||||
|
<package id="Python39" version="3.9.0" targetFramework="Native" />
|
||||||
|
<package id="python" version="3.10.10" allowedVersions="[3.10.0,3.11.0)" targetFramework="native" />
|
||||||
|
<package id="pythonx86" version="3.10.10" allowedVersions="[3.10.0,3.11.0)" targetFramework="native" />
|
||||||
<package id="clang-cmake" version="6.0.0.1" targetFramework="Native" />
|
<package id="clang-cmake" version="6.0.0.1" targetFramework="Native" />
|
||||||
<package id="llvm-cmake" version="6.0.0.1" targetFramework="Native" />
|
<package id="llvm-cmake" version="6.0.0.1" targetFramework="Native" />
|
||||||
</packages>
|
</packages>
|
||||||
|
@ -69,14 +69,14 @@ std::wstring getRegisterName(unsigned long index)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::list getCurrentStack()
|
python::list getStack(bool inlineFrames)
|
||||||
{
|
{
|
||||||
kdlib::StackPtr stack;
|
kdlib::StackPtr stack;
|
||||||
unsigned long numberFrames;
|
unsigned long numberFrames;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
stack = kdlib::getStack();
|
stack = kdlib::getStack(inlineFrames);
|
||||||
numberFrames = stack->getFrameCount();
|
numberFrames = stack->getFrameCount();
|
||||||
} while(false);
|
} while(false);
|
||||||
|
|
||||||
@ -242,6 +242,37 @@ python::dict StackFrameAdapter::getLocalsDict(kdlib::StackFramePtr& frame)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
python::tuple StackFrameAdapter::findSymbol(kdlib::StackFramePtr& frame)
|
||||||
|
{
|
||||||
|
kdlib::MEMDISPLACEMENT displacement;
|
||||||
|
std::wstring symbolName;
|
||||||
|
std::wstring moduleName;
|
||||||
|
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
symbolName = frame->findSymbol(displacement);
|
||||||
|
moduleName = kdlib::getModuleName(kdlib::findModuleBase(frame->getIP()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return python::make_tuple(moduleName, symbolName, displacement);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
python::tuple StackFrameAdapter::getSourceLine(kdlib::StackFramePtr& frame)
|
||||||
|
{
|
||||||
|
std::wstring fileName;
|
||||||
|
unsigned long lineno;
|
||||||
|
|
||||||
|
do {
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
frame->getSourceLine(fileName, lineno);
|
||||||
|
} while (false);
|
||||||
|
|
||||||
|
return python::make_tuple(fileName, lineno);
|
||||||
|
}
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::tuple CPUContextAdapter::getRegisterByIndex(unsigned long index)
|
python::tuple CPUContextAdapter::getRegisterByIndex(unsigned long index)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -70,6 +70,16 @@ public:
|
|||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
frame->switchTo();
|
frame->switchTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static python::tuple findSymbol(kdlib::StackFramePtr& frame);
|
||||||
|
|
||||||
|
static bool isInline(kdlib::StackFramePtr& frame)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return frame->isInline();
|
||||||
|
}
|
||||||
|
|
||||||
|
static python::tuple getSourceLine(kdlib::StackFramePtr& frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -157,7 +167,7 @@ inline void switchProcessorMode() {
|
|||||||
kdlib::switchCPUMode();
|
kdlib::switchCPUMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
python::list getCurrentStack();
|
python::list getStack(bool inlineFrames = false);
|
||||||
|
|
||||||
inline kdlib::StackFramePtr getCurrentFrame() {
|
inline kdlib::StackFramePtr getCurrentFrame() {
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
|
@ -163,6 +163,19 @@ python::list getLocalProcesses()
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
std::wstring getHostProcessPath()
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
std::vector<WCHAR> fileNameBuffer(0x1000);
|
||||||
|
|
||||||
|
DWORD fileNameSize = GetModuleFileNameW(NULL, &fileNameBuffer.front(), fileNameBuffer.size() );
|
||||||
|
|
||||||
|
return std::wstring(&fileNameBuffer.front(), fileNameSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::tuple getBugCheckData()
|
python::tuple getBugCheckData()
|
||||||
{
|
{
|
||||||
kdlib::SystemCrashInfo crashInfo = {};
|
kdlib::SystemCrashInfo crashInfo = {};
|
||||||
@ -213,4 +226,20 @@ std::wstring printSyntheticSymbol(const kdlib::SyntheticSymbol& syntheticSymbol)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void addSyntheticModule(kdlib::MEMOFFSET_64 base, unsigned long size, const std::wstring &name, const std::wstring &path /*= std::wstring{}*/)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::addSyntheticModule(base, size, name, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void removeSyntheticModule(kdlib::MEMOFFSET_64 base)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::removeSyntheticModule(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
} //end namespace pykd
|
} //end namespace pykd
|
||||||
|
@ -19,10 +19,10 @@ kdlib::PROCESS_DEBUG_ID startProcess(const std::wstring &processName, const kdl
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
kdlib::PROCESS_DEBUG_ID attachProcess(kdlib::PROCESS_ID pid)
|
kdlib::PROCESS_DEBUG_ID attachProcess(kdlib::PROCESS_ID pid, const kdlib::ProcessDebugFlags& flags = kdlib::ProcessDebugDefault)
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
return kdlib::attachProcess(pid);
|
return kdlib::attachProcess(pid, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
@ -104,13 +104,13 @@ bool isKernelDebugging()
|
|||||||
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
python::object debugCommand( const std::wstring &command, bool suppressOutput = true)
|
python::object debugCommand( const std::wstring &command, bool suppressOutput = true, const kdlib::OutputFlagsSet& captureFlags = kdlib::OutputFlag::Normal)
|
||||||
{
|
{
|
||||||
std::wstring debugResult;
|
std::wstring debugResult;
|
||||||
|
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
debugResult = kdlib::debugCommand(command, suppressOutput);
|
debugResult = kdlib::debugCommand(command, suppressOutput, captureFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debugResult.size() > 0 )
|
if (debugResult.size() > 0 )
|
||||||
@ -133,6 +133,34 @@ void changeDebugOptions(kdlib::DebugOptionsSet &addOptions, kdlib::DebugOptionsS
|
|||||||
kdlib::changeDebugOptions(addOptions, removeOptions);
|
kdlib::changeDebugOptions(addOptions, removeOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
kdlib::OutputFlagsSet getOutputMask()
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getOutputFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
void setOutputMask(const kdlib::OutputFlagsSet& outputMask)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
kdlib::setOutputFlags(outputMask);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
kdlib::DumpType getDumpType()
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getDumpType();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
kdlib::DumpFormatFlagsSet getDumpFormat()
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getDumpFormat();
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// processes end threads
|
// processes end threads
|
||||||
@ -279,6 +307,7 @@ inline void setImplicitProcess(kdlib::MEMOFFSET_64 offset)
|
|||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
kdlib::setImplicitProcess(offset);
|
kdlib::setImplicitProcess(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline kdlib::MEMOFFSET_64 getImplicitProcessOffset()
|
inline kdlib::MEMOFFSET_64 getImplicitProcessOffset()
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
@ -290,6 +319,8 @@ python::list getProcessThreads();
|
|||||||
python::list getTargetProcesses();
|
python::list getTargetProcesses();
|
||||||
python::list getLocalProcesses();
|
python::list getLocalProcesses();
|
||||||
|
|
||||||
|
std::wstring getHostProcessPath();
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
inline
|
inline
|
||||||
@ -456,6 +487,9 @@ kdlib::SyntheticSymbol addSyntheticSymbol( kdlib::MEMOFFSET_64 offset, unsigned
|
|||||||
void removeSyntheticSymbol(const kdlib::SyntheticSymbol& syntheticSymbol);
|
void removeSyntheticSymbol(const kdlib::SyntheticSymbol& syntheticSymbol);
|
||||||
std::wstring printSyntheticSymbol(const kdlib::SyntheticSymbol& syntheticSymbol);
|
std::wstring printSyntheticSymbol(const kdlib::SyntheticSymbol& syntheticSymbol);
|
||||||
|
|
||||||
|
void addSyntheticModule(kdlib::MEMOFFSET_64 base, unsigned long size, const std::wstring &name, const std::wstring &path = std::wstring{});
|
||||||
|
void removeSyntheticModule(kdlib::MEMOFFSET_64 base);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
} //end namespace pykd
|
} //end namespace pykd
|
||||||
|
@ -49,6 +49,12 @@ inline void dinput(const std::wstring &str)
|
|||||||
kdlib::dinput(str);
|
kdlib::dinput(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void setStatusMessage(const std::wstring &str)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
kdlib::setStatusMessage(str);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class DbgOut : public kdlib::windbg::WindbgOut
|
class DbgOut : public kdlib::windbg::WindbgOut
|
||||||
|
@ -468,7 +468,7 @@ void EventHandler::onChangeBreakpoints()
|
|||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void EventHandler::onDebugOutput(const std::wstring& text)
|
void EventHandler::onDebugOutput(const std::wstring& text, kdlib::OutputFlag flag)
|
||||||
{
|
{
|
||||||
PyEval_RestoreThread( m_pystate );
|
PyEval_RestoreThread( m_pystate );
|
||||||
|
|
||||||
@ -477,7 +477,7 @@ void EventHandler::onDebugOutput(const std::wstring& text)
|
|||||||
python::override pythonHandler = get_override("onDebugOutput");
|
python::override pythonHandler = get_override("onDebugOutput");
|
||||||
if ( pythonHandler )
|
if ( pythonHandler )
|
||||||
{
|
{
|
||||||
pythonHandler(text);
|
pythonHandler(text, flag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (const python::error_already_set &)
|
catch (const python::error_already_set &)
|
||||||
|
@ -28,21 +28,21 @@ public:
|
|||||||
|
|
||||||
EventHandler();
|
EventHandler();
|
||||||
|
|
||||||
virtual kdlib::DebugCallbackResult onBreakpoint( kdlib::BREAKPOINT_ID bpId );
|
kdlib::DebugCallbackResult onBreakpoint( kdlib::BREAKPOINT_ID bpId ) override;
|
||||||
virtual kdlib::DebugCallbackResult onException( const kdlib::ExceptionInfo &exceptionInfo );
|
kdlib::DebugCallbackResult onException( const kdlib::ExceptionInfo &exceptionInfo ) override;
|
||||||
virtual kdlib::DebugCallbackResult onModuleLoad( kdlib::MEMOFFSET_64 offset, const std::wstring &name );
|
kdlib::DebugCallbackResult onModuleLoad( kdlib::MEMOFFSET_64 offset, const std::wstring &name ) override;
|
||||||
virtual kdlib::DebugCallbackResult onModuleUnload( kdlib::MEMOFFSET_64 offset, const std::wstring &name );
|
kdlib::DebugCallbackResult onModuleUnload( kdlib::MEMOFFSET_64 offset, const std::wstring &name ) override;
|
||||||
virtual kdlib::DebugCallbackResult onThreadStart();
|
kdlib::DebugCallbackResult onThreadStart() override;
|
||||||
virtual kdlib::DebugCallbackResult onThreadStop();
|
kdlib::DebugCallbackResult onThreadStop() override;
|
||||||
|
|
||||||
virtual void onExecutionStatusChange(kdlib::ExecutionStatus executionStatus);
|
void onExecutionStatusChange(kdlib::ExecutionStatus executionStatus) override;
|
||||||
virtual void onCurrentThreadChange(kdlib::THREAD_DEBUG_ID threadid);
|
void onCurrentThreadChange(kdlib::THREAD_DEBUG_ID threadid) override;
|
||||||
virtual void onChangeLocalScope();
|
void onChangeLocalScope() override;
|
||||||
virtual void onChangeSymbolPaths();
|
void onChangeSymbolPaths() override;
|
||||||
virtual void onChangeBreakpoints();
|
void onChangeBreakpoints() override;
|
||||||
virtual void onDebugOutput(const std::wstring& text);
|
void onDebugOutput(const std::wstring& text, kdlib::OutputFlag flag) override;
|
||||||
virtual void onStartInput();
|
void onStartInput() override;
|
||||||
virtual void onStopInput();
|
void onStopInput() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -9,6 +9,14 @@
|
|||||||
<Configuration>Debug_2.7</Configuration>
|
<Configuration>Debug_2.7</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.10|Win32">
|
||||||
|
<Configuration>Debug_3.10</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.10|x64">
|
||||||
|
<Configuration>Debug_3.10</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Debug_3.5|Win32">
|
<ProjectConfiguration Include="Debug_3.5|Win32">
|
||||||
<Configuration>Debug_3.5</Configuration>
|
<Configuration>Debug_3.5</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
@ -33,6 +41,22 @@
|
|||||||
<Configuration>Debug_3.7</Configuration>
|
<Configuration>Debug_3.7</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.8|Win32">
|
||||||
|
<Configuration>Debug_3.8</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.8|x64">
|
||||||
|
<Configuration>Debug_3.8</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.9|Win32">
|
||||||
|
<Configuration>Debug_3.9</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug_3.9|x64">
|
||||||
|
<Configuration>Debug_3.9</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release_2.7|Win32">
|
<ProjectConfiguration Include="Release_2.7|Win32">
|
||||||
<Configuration>Release_2.7</Configuration>
|
<Configuration>Release_2.7</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
@ -41,6 +65,14 @@
|
|||||||
<Configuration>Release_2.7</Configuration>
|
<Configuration>Release_2.7</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.10|Win32">
|
||||||
|
<Configuration>Release_3.10</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.10|x64">
|
||||||
|
<Configuration>Release_3.10</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release_3.5|Win32">
|
<ProjectConfiguration Include="Release_3.5|Win32">
|
||||||
<Configuration>Release_3.5</Configuration>
|
<Configuration>Release_3.5</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
@ -65,6 +97,22 @@
|
|||||||
<Configuration>Release_3.7</Configuration>
|
<Configuration>Release_3.7</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.8|Win32">
|
||||||
|
<Configuration>Release_3.8</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.8|x64">
|
||||||
|
<Configuration>Release_3.8</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.9|Win32">
|
||||||
|
<Configuration>Release_3.9</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release_3.9|x64">
|
||||||
|
<Configuration>Release_3.9</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{C4C45791-0201-4406-BC5C-A384B01E3BF5}</ProjectGuid>
|
<ProjectGuid>{C4C45791-0201-4406-BC5C-A384B01E3BF5}</ProjectGuid>
|
||||||
@ -108,6 +156,30 @@
|
|||||||
<PythonVersion>3.7</PythonVersion>
|
<PythonVersion>3.7</PythonVersion>
|
||||||
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.8</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.9</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.10</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
@ -140,6 +212,30 @@
|
|||||||
<PythonVersion>3.7</PythonVersion>
|
<PythonVersion>3.7</PythonVersion>
|
||||||
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.8</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.9</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.10</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_DEBUG>MDd</LLVM_USE_CRT_DEBUG>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
@ -176,6 +272,33 @@
|
|||||||
<PythonVersion>3.7</PythonVersion>
|
<PythonVersion>3.7</PythonVersion>
|
||||||
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.8</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.9</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.10</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
@ -212,7 +335,33 @@
|
|||||||
<PythonVersion>3.7</PythonVersion>
|
<PythonVersion>3.7</PythonVersion>
|
||||||
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.8</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.9</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<PythonVersion>3.10</PythonVersion>
|
||||||
|
<LLVM_USE_CRT_RELEASE>MT</LLVM_USE_CRT_RELEASE>
|
||||||
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -228,6 +377,15 @@
|
|||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.7|Win32'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.7|Win32'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -240,6 +398,15 @@
|
|||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.7|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.7|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -252,6 +419,15 @@
|
|||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|Win32'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|Win32'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -264,6 +440,15 @@
|
|||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|x64'" Label="PropertySheets">
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|x64'" Label="PropertySheets">
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros">
|
<PropertyGroup Label="UserMacros">
|
||||||
<NuGetPackageImportStamp>bb9fbdf7</NuGetPackageImportStamp>
|
<NuGetPackageImportStamp>bb9fbdf7</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@ -299,6 +484,30 @@
|
|||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<TargetExt>.pyd</TargetExt>
|
<TargetExt>.pyd</TargetExt>
|
||||||
@ -331,6 +540,30 @@
|
|||||||
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<TargetExt>.pyd</TargetExt>
|
<TargetExt>.pyd</TargetExt>
|
||||||
@ -359,6 +592,27 @@
|
|||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<TargetExt>.pyd</TargetExt>
|
<TargetExt>.pyd</TargetExt>
|
||||||
@ -387,6 +641,27 @@
|
|||||||
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetExt>.pyd</TargetExt>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
<OutDir>$(SolutionDir)out\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
@ -476,6 +751,72 @@
|
|||||||
</Command>
|
</Command>
|
||||||
</CustomBuildStep>
|
</CustomBuildStep>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;$(SolutionDir)packages\pythonx86.3.10.10\tools\include</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)packages\pythonx86.3.10.10\tools\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_2.7|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
@ -564,6 +905,72 @@
|
|||||||
</Command>
|
</Command>
|
||||||
</CustomBuildStep>
|
</CustomBuildStep>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.8|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.9|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_3.10|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);BOOST_PYTHON_NUMPY_INTERNAL</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;$(SolutionDir)packages\python.3.10.10\tools\include</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)packages\python.3.10.10\tools\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
<CustomBuildStep>
|
||||||
|
<Command>
|
||||||
|
</Command>
|
||||||
|
</CustomBuildStep>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_2.7|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
@ -584,7 +991,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.5|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.5|Win32'">
|
||||||
@ -607,7 +1014,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.6|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.6|Win32'">
|
||||||
@ -630,7 +1037,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|Win32'">
|
||||||
@ -652,6 +1059,75 @@
|
|||||||
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;$(SolutionDir)packages\pythonx86.3.10.10\tools\include</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)packages\pythonx86.3.10.10\tools\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
@ -676,7 +1152,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.5|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.5|x64'">
|
||||||
@ -699,7 +1175,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.6|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.6|x64'">
|
||||||
@ -722,7 +1198,7 @@
|
|||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.7|x64'">
|
||||||
@ -744,6 +1220,75 @@
|
|||||||
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.8|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Debug\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.9|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_3.10|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;BOOST_PYTHON_STATIC_LIB;BOOST_PYTHON_NO_LIB;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)\kdlibcpp\kdlib\include;$(SolutionDir)\numpy\include;$(SolutionDir)packages\python.3.10.10\tools\include</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<ModuleDefinitionFile>pykd.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalLibraryDirectories>$(SolutionDir)packages\python.3.10.10\tools\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
<Command>copy $(OutDir)..\Release\targetapp.exe $(OutDir)</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
@ -901,6 +1446,8 @@
|
|||||||
<Import Project="$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets" Condition="'$(PythonVersion)'=='3.5' AND Exists('$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets')" />
|
<Import Project="$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets" Condition="'$(PythonVersion)'=='3.5' AND Exists('$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets')" />
|
||||||
<Import Project="$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets" Condition="'$(PythonVersion)'=='3.6' AND Exists('$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" />
|
<Import Project="$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets" Condition="'$(PythonVersion)'=='3.6' AND Exists('$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" />
|
||||||
<Import Project="$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets" Condition="'$(PythonVersion)'=='3.7' AND Exists('$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" />
|
<Import Project="$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets" Condition="'$(PythonVersion)'=='3.7' AND Exists('$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" />
|
||||||
|
<Import Project="$(SolutionDir)\packages\Python38.3.8.0\build\python38.targets" Condition="'$(PythonVersion)'=='3.8' AND Exists('$(SolutionDir)\packages\Python38.3.8.0\build\python38.targets')" />
|
||||||
|
<Import Project="$(SolutionDir)\packages\Python39.3.9.0\build\python39.targets" Condition="'$(PythonVersion)'=='3.9' AND Exists('$(SolutionDir)\packages\Python39.3.9.0\build\python39.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@ -919,5 +1466,7 @@
|
|||||||
<Error Condition="!Exists('$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python35.3.5.1\build\python35.targets'))" />
|
<Error Condition="!Exists('$(SolutionDir)\packages\Python35.3.5.1.1\build\python35.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python35.3.5.1\build\python35.targets'))" />
|
||||||
<Error Condition="!Exists('$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" />
|
<Error Condition="!Exists('$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python36.3.6.0\build\python36.targets')" />
|
||||||
<Error Condition="!Exists('$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" />
|
<Error Condition="!Exists('$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python37.1.0.0.1\build\python37.targets')" />
|
||||||
|
<Error Condition="!Exists('$(SolutionDir)\packages\Python38.3.8.0\build\python38.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python38.3.8.0\build\python38.targets')" />
|
||||||
|
<Error Condition="!Exists('$(SolutionDir)\packages\Python39.3.9.0\build\python39.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Python39.3.9.0\build\python39.targets')" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -2,7 +2,7 @@
|
|||||||
#define PYKD_VERSION_MAJOR 0
|
#define PYKD_VERSION_MAJOR 0
|
||||||
#define PYKD_VERSION_MINOR 3
|
#define PYKD_VERSION_MINOR 3
|
||||||
#define PYKD_VERSION_SUBVERSION 4
|
#define PYKD_VERSION_SUBVERSION 4
|
||||||
#define PYKD_VERSION_BUILDNO 1
|
#define PYKD_VERSION_BUILDNO 15
|
||||||
|
|
||||||
#define __VER_STR2__(x) #x
|
#define __VER_STR2__(x) #x
|
||||||
#define __VER_STR1__(x) __VER_STR2__(x)
|
#define __VER_STR1__(x) __VER_STR2__(x)
|
||||||
|
@ -266,8 +266,32 @@ inline kdlib::MemoryProtect getVaProtect( kdlib::MEMOFFSET_64 offset )
|
|||||||
return kdlib::getVaProtect(offset);
|
return kdlib::getVaProtect(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline kdlib::MemoryState getVaState(kdlib::MEMOFFSET_64 offset)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getVaState(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline kdlib::MemoryType getVaType(kdlib::MEMOFFSET_64 offset)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getVaType(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline python::tuple getVaAttributes(kdlib::MEMOFFSET_64 offset)
|
||||||
|
{
|
||||||
|
kdlib::MemoryProtect memProtect;
|
||||||
|
kdlib::MemoryState memState;
|
||||||
|
kdlib::MemoryType memType;
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
memProtect = kdlib::getVaProtect(offset);
|
||||||
|
memState = kdlib::getVaState(offset);
|
||||||
|
memType = kdlib::getVaType(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return python::make_tuple(memProtect, memState, memType);
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace pykd
|
} // end namespace pykd
|
||||||
|
|
||||||
|
3118
pykd/pymod.cpp
3118
pykd/pymod.cpp
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,8 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
#include "pymodule.h"
|
#include "pymodule.h"
|
||||||
|
#include <iomanip>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
namespace pykd {
|
namespace pykd {
|
||||||
|
|
||||||
@ -48,20 +50,8 @@ std::wstring ModuleAdapter::print( kdlib::Module& module )
|
|||||||
sstr << L"Image: " << module.getImageName() << std::endl;
|
sstr << L"Image: " << module.getImageName() << std::endl;
|
||||||
sstr << L"Symbols: " << module.getSymFile() << std::endl;
|
sstr << L"Symbols: " << module.getSymFile() << std::endl;
|
||||||
|
|
||||||
|
time_t timeStamp = module.getTimeDataStamp();
|
||||||
//if ( m_symSession )
|
sstr << L"Timestamp: " << timeStamp << " (" << std::put_time(std::gmtime(&timeStamp), L"%c") << L')' << std::endl;
|
||||||
//{
|
|
||||||
// sstr << "Symbols: " << m_symSession->getSymbolFileName() << std::endl;
|
|
||||||
// std::string buildDesc = m_symSession->getBuildDescription();
|
|
||||||
// if (!buildDesc.empty())
|
|
||||||
// sstr << "\t" << buildDesc << std::endl;
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// sstr << "Symbols: not found" << std::endl;
|
|
||||||
//}
|
|
||||||
|
|
||||||
sstr << L"Timestamp: " << module.getTimeDataStamp() << std::endl;
|
|
||||||
sstr << L"Check Sum: " << module.getCheckSum() << std::endl;
|
sstr << L"Check Sum: " << module.getCheckSum() << std::endl;
|
||||||
|
|
||||||
return sstr.str();
|
return sstr.str();
|
||||||
@ -103,6 +93,15 @@ python::list ModuleAdapter::enumTypes(kdlib::Module& module, const std::wstring
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool ModuleAdapter::isContainedSymbol(kdlib::ModulePtr& module, const std::wstring& symbolName)
|
||||||
|
{
|
||||||
|
if (!module->enumSymbols(symbolName).empty())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return !module->enumTypes(symbolName).empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
std::wstring ModuleAdapter::findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement )
|
std::wstring ModuleAdapter::findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement )
|
||||||
{
|
{
|
||||||
|
@ -82,19 +82,50 @@ struct ModuleAdapter : public kdlib::Module
|
|||||||
return module.getSymbolVa(symbolName);
|
return module.getSymbolVa(symbolName);
|
||||||
}
|
}
|
||||||
|
|
||||||
static kdlib::MEMOFFSET_64 getSymbolVaAttr(kdlib::Module& module, const std::wstring &symbolName)
|
static python::object getAttrByName(kdlib::Module& module, const std::wstring &symbolName)
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
try {
|
try {
|
||||||
return module.getSymbolVa(symbolName);
|
return python::object(module.getSymbolVa(symbolName));
|
||||||
|
}
|
||||||
|
catch (kdlib::DbgException&)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
return python::object(module.getTypeByName(symbolName));
|
||||||
|
}
|
||||||
|
catch (kdlib::DbgException&)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
std::wstringstream sstr;
|
||||||
|
sstr << L'\'' << module.getName() << L'\'' << L" module has not a symbol " << L'\'' << symbolName << L'\'';
|
||||||
|
throw AttributeException(std::string(_bstr_t(sstr.str().c_str())).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
static python::object getItemByKey(kdlib::Module& module, const std::wstring &symbolName)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return python::object(module.getSymbolVa(symbolName));
|
||||||
}
|
}
|
||||||
catch (kdlib::DbgException&)
|
catch (kdlib::DbgException&)
|
||||||
{
|
{
|
||||||
std::wstringstream sstr;
|
|
||||||
sstr << L'\'' << module.getName() << L'\'' << L" module has no symbol " << L'\'' << symbolName << L'\'';
|
|
||||||
throw AttributeException(std::string(_bstr_t(sstr.str().c_str())).c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return python::object(module.getTypeByName(symbolName));
|
||||||
|
}
|
||||||
|
catch (kdlib::DbgException&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstringstream sstr;
|
||||||
|
sstr << L"module has not a symbol " << L'\'' << symbolName << L'\'';
|
||||||
|
throw KeyException(std::string(_bstr_t(sstr.str().c_str())).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static kdlib::MEMOFFSET_32 getSymbolRva( kdlib::Module& module, const std::wstring &symbolName )
|
static kdlib::MEMOFFSET_32 getSymbolRva( kdlib::Module& module, const std::wstring &symbolName )
|
||||||
{
|
{
|
||||||
@ -198,6 +229,7 @@ struct ModuleAdapter : public kdlib::Module
|
|||||||
|
|
||||||
static python::list getTypedVarArrayByTypeName( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, size_t number );
|
static python::list getTypedVarArrayByTypeName( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, size_t number );
|
||||||
|
|
||||||
|
static bool isContainedSymbol(kdlib::ModulePtr& module, const std::wstring& symbolName);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace pykd
|
} // end namespace pykd
|
||||||
|
@ -103,7 +103,7 @@ python::list getTypedVarArrayByType( kdlib::MEMOFFSET_64 offset, kdlib::TypeInfo
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::list TypedVarAdapter::getFields( kdlib::TypedVar& typedVar )
|
python::list TypedVarAdapter::getFields(const kdlib::TypedVarPtr& typedVar)
|
||||||
{
|
{
|
||||||
typedef boost::tuple<std::wstring,kdlib::MEMOFFSET_32,kdlib::TypedVarPtr> FieldTuple;
|
typedef boost::tuple<std::wstring,kdlib::MEMOFFSET_32,kdlib::TypedVarPtr> FieldTuple;
|
||||||
|
|
||||||
@ -113,15 +113,18 @@ python::list TypedVarAdapter::getFields( kdlib::TypedVar& typedVar )
|
|||||||
|
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
for ( size_t i = 0; i < typedVar.getElementCount(); ++i )
|
for ( size_t i = 0; i < typedVar->getElementCount(); ++i )
|
||||||
{
|
{
|
||||||
std::wstring name = typedVar.getElementName(i);
|
std::wstring name = typedVar->getElementName(i);
|
||||||
kdlib::MEMOFFSET_32 offset = 0;
|
kdlib::MEMOFFSET_32 offset = 0;
|
||||||
|
|
||||||
if (!typedVar.getType()->isStaticMember(i) )
|
if (typedVar->getType()->isConstMember(i))
|
||||||
offset = typedVar.getElementOffset(i);
|
continue;
|
||||||
|
|
||||||
kdlib::TypedVarPtr val = typedVar.getElement(i);
|
if (!typedVar->getType()->isStaticMember(i) )
|
||||||
|
offset = typedVar->getElementOffset(i);
|
||||||
|
|
||||||
|
kdlib::TypedVarPtr val = typedVar->getElement(i);
|
||||||
|
|
||||||
lst.push_back( FieldTuple( name, offset, val ) );
|
lst.push_back( FieldTuple( name, offset, val ) );
|
||||||
}
|
}
|
||||||
@ -136,6 +139,77 @@ python::list TypedVarAdapter::getFields( kdlib::TypedVar& typedVar )
|
|||||||
return pylst;
|
return pylst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
python::list TypedVarAdapter::getMembers(const kdlib::TypedVarPtr& typedVar)
|
||||||
|
{
|
||||||
|
typedef boost::tuple<std::wstring, kdlib::MEMOFFSET_32, kdlib::TypedVarPtr> FieldTuple;
|
||||||
|
|
||||||
|
std::list<FieldTuple> lst;
|
||||||
|
|
||||||
|
do {
|
||||||
|
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
auto varType = typedVar->getType();
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typedVar->getElementCount(); ++i)
|
||||||
|
{
|
||||||
|
if (varType->isConstMember(i) || varType->isInheritedMember(i))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
std::wstring name = typedVar->getElementName(i);
|
||||||
|
kdlib::MEMOFFSET_32 offset = 0;
|
||||||
|
|
||||||
|
if (!varType->isStaticMember(i))
|
||||||
|
offset = typedVar->getElementOffset(i);
|
||||||
|
|
||||||
|
kdlib::TypedVarPtr val = typedVar->getElement(i);
|
||||||
|
|
||||||
|
lst.push_back(FieldTuple(name, offset, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (false);
|
||||||
|
|
||||||
|
python::list pylst;
|
||||||
|
|
||||||
|
for (std::list<FieldTuple>::const_iterator it = lst.begin(); it != lst.end(); ++it)
|
||||||
|
pylst.append(python::make_tuple(it->get<0>(), it->get<1>(), it->get<2>()));
|
||||||
|
|
||||||
|
return pylst;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TypedVarAdapter::hasField(kdlib::TypedVarPtr& typedVar, const std::wstring &fieldName)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typedVar->getElementCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typedVar->getElementName(i);
|
||||||
|
if (name == fieldName)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TypedVarAdapter::hasMethod(kdlib::TypedVarPtr& typedVar, const std::wstring &name)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
try {
|
||||||
|
typedVar->getMethod(name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (kdlib::DbgException&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::list TypedVarAdapter::getElementsDir(kdlib::TypedVar& typedVar)
|
python::list TypedVarAdapter::getElementsDir(kdlib::TypedVar& typedVar)
|
||||||
@ -168,30 +242,32 @@ python::list TypedVarAdapter::getElementsDir(kdlib::TypedVar& typedVar)
|
|||||||
|
|
||||||
kdlib::TypedVarPtr TypedVarAdapter::getFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name)
|
kdlib::TypedVarPtr TypedVarAdapter::getFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name)
|
||||||
{
|
{
|
||||||
|
if (name == L"__name__")
|
||||||
|
throw AttributeException("no __name__ attribute");
|
||||||
|
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
|
return typedVar.getElement( name );
|
||||||
|
}
|
||||||
|
catch (kdlib::TypeException&)
|
||||||
|
{}
|
||||||
|
|
||||||
AutoRestorePyState pystate;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return typedVar.getElement( name );
|
return typedVar.getMethod(name);
|
||||||
}
|
}
|
||||||
catch (kdlib::TypeException&)
|
catch (kdlib::TypeException&)
|
||||||
{}
|
{
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return typedVar.getMethod( name );
|
|
||||||
}
|
|
||||||
catch (kdlib::TypeException&)
|
|
||||||
{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstringstream sstr;
|
|
||||||
sstr << L"typed var has no field " << L'\'' << name << L'\'';
|
|
||||||
throw AttributeException(std::string(_bstr_t(sstr.str().c_str())).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
std::stringstream sstr;
|
||||||
|
sstr << "typed var has no field " << '\'' << _bstr_t(name.c_str()) << '\'';
|
||||||
|
throw AttributeException(sstr.str().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -261,7 +337,6 @@ void TypedVarAdapter::setFieldAttr(kdlib::TypedVar& typedVar, const std::wstring
|
|||||||
kdlib::TypedVarPtr TypedVarAdapter::getFieldByKey(kdlib::TypedVar& typedVar, const std::wstring &name)
|
kdlib::TypedVarPtr TypedVarAdapter::getFieldByKey(kdlib::TypedVar& typedVar, const std::wstring &name)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -306,5 +381,57 @@ void TypedVarAdapter::setFieldByKey(kdlib::TypedVar& typedVar, const std::wstrin
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class PyScope : public kdlib::Scope
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
kdlib::TypedValue get(const std::wstring& varName) const override
|
||||||
|
{
|
||||||
|
return getTypdedValueFromPyObj(m_scope[varName]);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool find(const std::wstring& varName, kdlib::TypedValue& value) const override
|
||||||
|
{
|
||||||
|
if (!m_scope.contains(varName))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
value = getTypdedValueFromPyObj(m_scope[varName]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyScope(const python::object& scope) :
|
||||||
|
m_scope(scope)
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
python::object m_scope;
|
||||||
|
};
|
||||||
|
|
||||||
|
kdlib::TypedVarPtr evalExpr(const std::string expression, python::object& scope, kdlib::TypeInfoProviderPtr& typeInfoProvider )
|
||||||
|
{
|
||||||
|
if (scope)
|
||||||
|
{
|
||||||
|
return kdlib::evalExpr(expression, kdlib::ScopePtr(new PyScope(scope)), typeInfoProvider).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
return kdlib::evalExpr(expression).get();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
kdlib::TypedValue getTypdedValueFromPyObj(const python::object& value)
|
||||||
|
{
|
||||||
|
python::extract<kdlib::TypedVarPtr> getTypedVar(value);
|
||||||
|
if (getTypedVar.check())
|
||||||
|
return getTypedVar();
|
||||||
|
|
||||||
|
return NumVariantAdaptor::convertToVariant(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
} // namespace pykd
|
} // namespace pykd
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
namespace python = boost::python;
|
namespace python = boost::python;
|
||||||
|
|
||||||
#include "kdlib/typedvar.h"
|
#include "kdlib/typedvar.h"
|
||||||
|
#include "kdlib/typeinfo.h"
|
||||||
|
|
||||||
#include "stladaptor.h"
|
#include "stladaptor.h"
|
||||||
#include "pythreadstate.h"
|
#include "pythreadstate.h"
|
||||||
@ -142,6 +143,10 @@ struct TypedVarAdapter {
|
|||||||
|
|
||||||
static void setField(kdlib::TypedVar& typedVar, const std::wstring &name, python::object& object);
|
static void setField(kdlib::TypedVar& typedVar, const std::wstring &name, python::object& object);
|
||||||
|
|
||||||
|
static bool hasField(kdlib::TypedVarPtr& typedVar, const std::wstring &name);
|
||||||
|
|
||||||
|
static bool hasMethod(kdlib::TypedVarPtr& typedVar, const std::wstring &name);
|
||||||
|
|
||||||
static kdlib::TypedVarPtr getFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name);
|
static kdlib::TypedVarPtr getFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name);
|
||||||
|
|
||||||
static void setFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name, python::object& object);
|
static void setFieldAttr(kdlib::TypedVar& typedVar, const std::wstring &name, python::object& object);
|
||||||
@ -182,7 +187,9 @@ struct TypedVarAdapter {
|
|||||||
return typedVar.str();
|
return typedVar.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
static python::list getFields( kdlib::TypedVar& typedVar );
|
static python::list getFields(const kdlib::TypedVarPtr& typedVar);
|
||||||
|
|
||||||
|
static python::list getMembers(const kdlib::TypedVarPtr& typedVar);
|
||||||
|
|
||||||
static kdlib::TypeInfoPtr getType( kdlib::TypedVar& typedVar )
|
static kdlib::TypeInfoPtr getType( kdlib::TypedVar& typedVar )
|
||||||
{
|
{
|
||||||
@ -227,6 +234,12 @@ struct TypedVarAdapter {
|
|||||||
{
|
{
|
||||||
return new TypedVarIterator(typedVar);
|
return new TypedVarIterator(typedVar);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
kdlib::TypedValue getTypdedValueFromPyObj(const python::object& value);
|
||||||
|
|
||||||
|
kdlib::TypedVarPtr evalExpr(const std::string expression, python::object& scope = python::object(), kdlib::TypeInfoProviderPtr& typeInfoProvider = kdlib::getDefaultTypeInfoProvider());
|
||||||
|
|
||||||
|
|
||||||
} // end namespace pykd
|
} // end namespace pykd
|
||||||
|
@ -75,7 +75,7 @@ python::tuple findSymbolAndDisp( ULONG64 offset )
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
python::list TypeInfoAdapter::getFields( kdlib::TypeInfo &typeInfo )
|
python::list TypeInfoAdapter::getFields( const kdlib::TypeInfoPtr &typeInfo )
|
||||||
{
|
{
|
||||||
typedef boost::tuple<std::wstring,kdlib::TypeInfoPtr> FieldTuple;
|
typedef boost::tuple<std::wstring,kdlib::TypeInfoPtr> FieldTuple;
|
||||||
|
|
||||||
@ -85,10 +85,10 @@ python::list TypeInfoAdapter::getFields( kdlib::TypeInfo &typeInfo )
|
|||||||
|
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
for ( size_t i = 0; i < typeInfo.getElementCount(); ++i )
|
for ( size_t i = 0; i < typeInfo->getElementCount(); ++i )
|
||||||
{
|
{
|
||||||
std::wstring name = typeInfo.getElementName(i);
|
std::wstring name = typeInfo->getElementName(i);
|
||||||
kdlib::TypeInfoPtr val = typeInfo.getElement(i);
|
kdlib::TypeInfoPtr val = typeInfo->getElement(i);
|
||||||
|
|
||||||
lst.push_back( FieldTuple( name, val ) );
|
lst.push_back( FieldTuple( name, val ) );
|
||||||
}
|
}
|
||||||
@ -103,6 +103,84 @@ python::list TypeInfoAdapter::getFields( kdlib::TypeInfo &typeInfo )
|
|||||||
return pylst;
|
return pylst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
python::list TypeInfoAdapter::getMembers(const kdlib::TypeInfoPtr &typeInfo)
|
||||||
|
{
|
||||||
|
typedef boost::tuple<std::wstring, kdlib::TypeInfoPtr> FieldTuple;
|
||||||
|
|
||||||
|
std::list<FieldTuple> lst;
|
||||||
|
|
||||||
|
do {
|
||||||
|
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typeInfo->getElementCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typeInfo->getElementName(i);
|
||||||
|
kdlib::TypeInfoPtr val = typeInfo->getElement(i);
|
||||||
|
|
||||||
|
if (!typeInfo->isInheritedMember(i))
|
||||||
|
lst.push_back(FieldTuple(name, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (false);
|
||||||
|
|
||||||
|
python::list pylst;
|
||||||
|
|
||||||
|
for (std::list<FieldTuple>::const_iterator it = lst.begin(); it != lst.end(); ++it)
|
||||||
|
pylst.append(python::make_tuple(it->get<0>(), it->get<1>()));
|
||||||
|
|
||||||
|
return pylst;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TypeInfoAdapter::hasFieldOrMethod(kdlib::TypeInfoPtr& typeInfo, const std::wstring& fieldName)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typeInfo->getElementCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typeInfo->getElementName(i);
|
||||||
|
if (name == fieldName)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typeInfo->getMethodsCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typeInfo->getMethodName(i);
|
||||||
|
if (name == fieldName)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TypeInfoAdapter::hasField(kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typeInfo->getElementCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typeInfo->getElementName(i);
|
||||||
|
if (name == fieldName)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TypeInfoAdapter::hasMethod(kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < typeInfo->getMethodsCount(); ++i)
|
||||||
|
{
|
||||||
|
std::wstring name = typeInfo->getMethodName(i);
|
||||||
|
if (name == fieldName)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
python::list TypeInfoAdapter::getMethods(kdlib::TypeInfo &typeInfo)
|
python::list TypeInfoAdapter::getMethods(kdlib::TypeInfo &typeInfo)
|
||||||
{
|
{
|
||||||
typedef boost::tuple<std::wstring, kdlib::TypeInfoPtr> FieldTuple;
|
typedef boost::tuple<std::wstring, kdlib::TypeInfoPtr> FieldTuple;
|
||||||
@ -162,48 +240,73 @@ python::list TypeInfoAdapter::getBaseClasses(kdlib::TypeInfo &typeInfo)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
kdlib::TypeInfoPtr TypeInfoAdapter::getElementAttr(kdlib::TypeInfo &typeInfo, const std::wstring &name)
|
python::list TypeInfoAdapter::getTemplateArgs(const kdlib::TypeInfoPtr &typeInfo)
|
||||||
{
|
{
|
||||||
|
std::list<std::wstring> templateArgs;
|
||||||
|
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
try {
|
for (size_t i = 0; i < typeInfo->getTemplateArgsCount(); ++i)
|
||||||
return typeInfo.getElement(name);
|
{
|
||||||
|
templateArgs.push_back(typeInfo->getTemplateArg(i));
|
||||||
}
|
}
|
||||||
catch (kdlib::TypeException&)
|
}
|
||||||
{}
|
|
||||||
|
python::list pylst;
|
||||||
|
|
||||||
try {
|
for (const auto& arg : templateArgs)
|
||||||
return typeInfo.getMethod(name);
|
pylst.append(arg);
|
||||||
}
|
|
||||||
catch (kdlib::TypeException&)
|
return pylst;
|
||||||
{}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
kdlib::TypeInfoPtr TypeInfoAdapter::getElementAttr(kdlib::TypeInfo &typeInfo, const std::wstring &name)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return typeInfo.getElement(name);
|
||||||
|
}
|
||||||
|
catch (kdlib::TypeException&)
|
||||||
|
{}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return typeInfo.getMethod(name);
|
||||||
|
}
|
||||||
|
catch (kdlib::TypeException&)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstringstream sstr;
|
std::stringstream sstr;
|
||||||
sstr << L'\'' << typeInfo.getName() << L'\'' << L" type has no field " << L'\'' << name << L'\'';
|
sstr << '\'' << _bstr_t(typeInfo.getName().c_str()) << '\''
|
||||||
throw AttributeException(std::string(_bstr_t(sstr.str().c_str())).c_str());
|
<< " type has no field " << '\'' << _bstr_t(name.c_str()) << '\'';
|
||||||
|
throw AttributeException(sstr.str().c_str());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
kdlib::TypeInfoPtr TypeInfoAdapter::getElementByKey(kdlib::TypeInfo &typeInfo, const std::wstring &name)
|
kdlib::TypeInfoPtr TypeInfoAdapter::getElementByKey(kdlib::TypeInfo &typeInfo, const std::wstring &name)
|
||||||
{
|
{
|
||||||
{
|
|
||||||
AutoRestorePyState pystate;
|
|
||||||
|
|
||||||
try {
|
AutoRestorePyState pystate;
|
||||||
return typeInfo.getElement(name);
|
|
||||||
}
|
|
||||||
catch (kdlib::TypeException&)
|
|
||||||
{}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return typeInfo.getMethod(name);
|
return typeInfo.getElement(name);
|
||||||
}
|
|
||||||
catch (kdlib::TypeException&)
|
|
||||||
{}
|
|
||||||
}
|
}
|
||||||
|
catch (kdlib::TypeException&)
|
||||||
|
{}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return typeInfo.getMethod(name);
|
||||||
|
}
|
||||||
|
catch (kdlib::TypeException&)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
std::wstringstream sstr;
|
std::wstringstream sstr;
|
||||||
sstr << L'\'' << typeInfo.getName() << L'\'' << L" type has no field " << L'\'' << name << L'\'';
|
sstr << L'\'' << typeInfo.getName() << L'\'' << L" type has no field " << L'\'' << name << L'\'';
|
||||||
@ -291,7 +394,6 @@ python::object callTypedVar(kdlib::TypedVarPtr& funcobj, python::tuple& args)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ( python::extract<int>(args[i]).check() )
|
if ( python::extract<int>(args[i]).check() )
|
||||||
{
|
{
|
||||||
kdlib::NumVariant var= NumVariantAdaptor::convertToVariant(args[i]);
|
kdlib::NumVariant var= NumVariantAdaptor::convertToVariant(args[i]);
|
||||||
|
@ -69,6 +69,12 @@ inline kdlib::TypeInfoProviderPtr getTypeInfoProviderFromSource(const std::wstri
|
|||||||
return kdlib::getTypeInfoProviderFromSource(sourceCode, compileOptions);
|
return kdlib::getTypeInfoProviderFromSource(sourceCode, compileOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline kdlib::SymbolProviderPtr getSymbolProviderFromSource(const std::wstring& sourceCode, const std::wstring& compileOptions = L"")
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return kdlib::getSymbolProviderFromSource(sourceCode, compileOptions);
|
||||||
|
}
|
||||||
|
|
||||||
inline kdlib::TypeInfoProviderPtr getTypeInfoProviderFromPdb(const std::wstring& fileName, kdlib::MEMOFFSET_64 offset = 0UL)
|
inline kdlib::TypeInfoProviderPtr getTypeInfoProviderFromPdb(const std::wstring& fileName, kdlib::MEMOFFSET_64 offset = 0UL)
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
@ -143,6 +149,30 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
|||||||
return typeInfo.getElementVa( name );
|
return typeInfo.getElementVa( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isStaticField(const kdlib::TypeInfoPtr &typeInfo, const std::wstring &name)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return typeInfo->isStaticMember(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isStaticFieldByIndex(const kdlib::TypeInfoPtr &typeInfo, size_t index)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return typeInfo->isStaticMember(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool isConstField(const kdlib::TypeInfoPtr &typeInfo, const std::wstring &name)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return typeInfo->isConstMember(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool isConstFieldByIndex(const kdlib::TypeInfoPtr &typeInfo, size_t index)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return typeInfo->isConstMember(index);
|
||||||
|
}
|
||||||
|
|
||||||
static kdlib::TypeInfoPtr getElementByName( kdlib::TypeInfo &typeInfo, const std::wstring &name )
|
static kdlib::TypeInfoPtr getElementByName( kdlib::TypeInfo &typeInfo, const std::wstring &name )
|
||||||
{
|
{
|
||||||
@ -150,6 +180,10 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
|||||||
return typeInfo.getElement(name);
|
return typeInfo.getElement(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool hasField(kdlib::TypeInfoPtr &typeInfo, const std::wstring &name);
|
||||||
|
|
||||||
|
static bool hasMethod(kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName);
|
||||||
|
|
||||||
static kdlib::TypeInfoPtr getElementAttr(kdlib::TypeInfo &typeInfo, const std::wstring &name);
|
static kdlib::TypeInfoPtr getElementAttr(kdlib::TypeInfo &typeInfo, const std::wstring &name);
|
||||||
|
|
||||||
static kdlib::TypeInfoPtr getElementByKey(kdlib::TypeInfo &typeInfo, const std::wstring &name);
|
static kdlib::TypeInfoPtr getElementByKey(kdlib::TypeInfo &typeInfo, const std::wstring &name);
|
||||||
@ -298,6 +332,12 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
|||||||
return typeInfo.isNoType();
|
return typeInfo.isNoType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isTemplate(const kdlib::TypeInfoPtr &typeInfo)
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
return typeInfo->isTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
static void appendField( kdlib::TypeInfo &typeInfo, const std::wstring &fieldName, kdlib::TypeInfoPtr &fieldType )
|
static void appendField( kdlib::TypeInfo &typeInfo, const std::wstring &fieldName, kdlib::TypeInfoPtr &fieldType )
|
||||||
{
|
{
|
||||||
AutoRestorePyState pystate;
|
AutoRestorePyState pystate;
|
||||||
@ -322,7 +362,9 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
|||||||
return typeInfo.str();
|
return typeInfo.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
static python::list getFields( kdlib::TypeInfo &typeInfo );
|
static python::list getFields( const kdlib::TypeInfoPtr &typeInfo );
|
||||||
|
|
||||||
|
static python::list getMembers(const kdlib::TypeInfoPtr &typeInfo);
|
||||||
|
|
||||||
static python::list getMethods(kdlib::TypeInfo &typeInfo);
|
static python::list getMethods(kdlib::TypeInfo &typeInfo);
|
||||||
|
|
||||||
@ -330,10 +372,18 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
|||||||
|
|
||||||
static python::list getBaseClasses(kdlib::TypeInfo &typeInfo);
|
static python::list getBaseClasses(kdlib::TypeInfo &typeInfo);
|
||||||
|
|
||||||
|
static python::list getTemplateArgs(const kdlib::TypeInfoPtr &typeInfo);
|
||||||
|
|
||||||
static bool isZero(kdlib::TypeInfo &typeInfo) {
|
static bool isZero(kdlib::TypeInfo &typeInfo) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isNotZero(kdlib::TypeInfo &typeInfo) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool hasFieldOrMethod(kdlib::TypeInfoPtr& typedVar, const std::wstring& name);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -392,6 +442,56 @@ struct TypeInfoProviderAdapter : public kdlib::TypeInfoProvider
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SymbolEnumeratorAdapter
|
||||||
|
{
|
||||||
|
SymbolEnumeratorAdapter(const kdlib::SymbolEnumeratorPtr& symEnum)
|
||||||
|
: m_symEnum(symEnum)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
static python::object getIter(const python::object& obj)
|
||||||
|
{
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
python::tuple next()
|
||||||
|
{
|
||||||
|
std::wstring name;
|
||||||
|
kdlib::MEMOFFSET_64 offset;
|
||||||
|
kdlib::TypeInfoPtr typeInfo;
|
||||||
|
|
||||||
|
{
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
|
||||||
|
if (!m_symEnum->Next())
|
||||||
|
throw StopIteration("No more data.");
|
||||||
|
|
||||||
|
name = m_symEnum->getName();
|
||||||
|
offset = m_symEnum->getOffset();
|
||||||
|
typeInfo = m_symEnum->getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
return python::make_tuple(name, offset, typeInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
kdlib::SymbolEnumeratorPtr m_symEnum;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SymbolProviderAdapter
|
||||||
|
{
|
||||||
|
static SymbolEnumeratorAdapter* getIter(const kdlib::SymbolProviderPtr &symProvider)
|
||||||
|
{
|
||||||
|
return new SymbolEnumeratorAdapter(symProvider->getSymbolEnumerator());
|
||||||
|
};
|
||||||
|
|
||||||
|
static SymbolEnumeratorAdapter* getIterWithMask(const kdlib::SymbolProviderPtr &symProvider, const std::wstring& mask)
|
||||||
|
{
|
||||||
|
return new SymbolEnumeratorAdapter(symProvider->getSymbolEnumerator(mask));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct BaseTypesEnum {
|
struct BaseTypesEnum {
|
||||||
static kdlib::TypeInfoPtr getUInt1B() { return pykd::getTypeInfoByName(L"UInt1B"); }
|
static kdlib::TypeInfoPtr getUInt1B() { return pykd::getTypeInfoByName(L"UInt1B"); }
|
||||||
static kdlib::TypeInfoPtr getUInt2B() { return pykd::getTypeInfoByName(L"UInt2B"); }
|
static kdlib::TypeInfoPtr getUInt2B() { return pykd::getTypeInfoByName(L"UInt2B"); }
|
||||||
@ -411,9 +511,4 @@ struct BaseTypesEnum {
|
|||||||
static kdlib::TypeInfoPtr getDouble() { return pykd::getTypeInfoByName(L"Double"); }
|
static kdlib::TypeInfoPtr getDouble() { return pykd::getTypeInfoByName(L"Double"); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace pykd
|
} // end namespace pykd
|
||||||
|
@ -14,12 +14,12 @@ class NumVariantAdaptor : public kdlib::NumConvertable
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static kdlib::NumVariant NumVariantAdaptor::convertToVariant( const python::object &obj)
|
static kdlib::NumVariant convertToVariant(const python::object &obj)
|
||||||
{
|
{
|
||||||
kdlib::NumVariant var;
|
kdlib::NumVariant var;
|
||||||
|
|
||||||
python::extract<kdlib::NumConvertable> getNumVar(obj);
|
python::extract<kdlib::NumConvertable> getNumVar(obj);
|
||||||
if ( getNumVar.check() )
|
if (getNumVar.check())
|
||||||
{
|
{
|
||||||
var = getNumVar();
|
var = getNumVar();
|
||||||
return var;
|
return var;
|
||||||
@ -49,23 +49,24 @@ public:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_PyLong_Sign(obj.ptr()) >= 0)
|
if (PyLong_Check(obj.ptr()))
|
||||||
{
|
|
||||||
if (_PyLong_NumBits(obj.ptr()) > 64)
|
|
||||||
throw pykd::OverflowException("int too big to convert");
|
|
||||||
|
|
||||||
var.setULongLong(PyLong_AsUnsignedLongLong(obj.ptr()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (_PyLong_NumBits(obj.ptr()) > 63)
|
if (_PyLong_NumBits(obj.ptr()) > 63)
|
||||||
throw pykd::OverflowException("int too big to convert");
|
{
|
||||||
|
if (_PyLong_NumBits(obj.ptr()) > 64)
|
||||||
|
throw pykd::OverflowException("int too big to convert");
|
||||||
|
|
||||||
var.setLongLong(PyLong_AsLongLong(obj.ptr()));
|
var.setULongLong(PyLong_AsUnsignedLongLong(obj.ptr()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var.setLongLong(PyLong_AsLongLong(obj.ptr()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return var;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw kdlib::TypeException(L"failed convert argument");
|
||||||
return var;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static python::object NumVariantAdaptor::convertToPython( const kdlib::NumVariant& var )
|
static python::object NumVariantAdaptor::convertToPython( const kdlib::NumVariant& var )
|
||||||
@ -281,7 +282,7 @@ public:
|
|||||||
|
|
||||||
static std::string hex(kdlib::NumConvertable& var) {
|
static std::string hex(kdlib::NumConvertable& var) {
|
||||||
kdlib::NumVariant v = var;
|
kdlib::NumVariant v = var;
|
||||||
return std::string("0x") + std::string(_bstr_t(v.asHex().c_str()));
|
return _bstr_t(v.asHex().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isInteger(kdlib::NumConvertable& var) {
|
static bool isInteger(kdlib::NumConvertable& var) {
|
||||||
|
@ -12,6 +12,8 @@ namespace python = boost::python;
|
|||||||
#include "dbgexcept.h"
|
#include "dbgexcept.h"
|
||||||
#include "pydbgio.h"
|
#include "pydbgio.h"
|
||||||
|
|
||||||
|
#include <python.h>
|
||||||
|
|
||||||
using namespace kdlib::windbg;
|
using namespace kdlib::windbg;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -228,16 +230,16 @@ KDLIB_EXT_COMMAND_METHOD_IMPL(PykdExt, py)
|
|||||||
{
|
{
|
||||||
PyInterpreterState *interpreter = localState->interp;
|
PyInterpreterState *interpreter = localState->interp;
|
||||||
|
|
||||||
while( interpreter->tstate_head != NULL )
|
//while( interpreter->tstate_head != NULL )
|
||||||
{
|
//{
|
||||||
PyThreadState *threadState = (PyThreadState*)(interpreter->tstate_head);
|
// PyThreadState *threadState = (PyThreadState*)(interpreter->tstate_head);
|
||||||
|
|
||||||
PyThreadState_Clear(threadState);
|
// PyThreadState_Clear(threadState);
|
||||||
|
|
||||||
PyThreadState_Swap( NULL );
|
// PyThreadState_Swap( NULL );
|
||||||
|
|
||||||
PyThreadState_Delete(threadState);
|
// PyThreadState_Delete(threadState);
|
||||||
}
|
//}
|
||||||
|
|
||||||
PyInterpreterState_Clear(interpreter);
|
PyInterpreterState_Clear(interpreter);
|
||||||
|
|
||||||
|
@ -16,4 +16,16 @@ py -3.6 setup.py bdist_wheel --plat-name=win-amd64 --python-tag=cp36
|
|||||||
py -3.7 setup.py bdist_zip --plat-name=win32
|
py -3.7 setup.py bdist_zip --plat-name=win32
|
||||||
py -3.7 setup.py bdist_zip --plat-name=win-amd64
|
py -3.7 setup.py bdist_zip --plat-name=win-amd64
|
||||||
py -3.7 setup.py bdist_wheel --plat-name=win32 --python-tag=cp37
|
py -3.7 setup.py bdist_wheel --plat-name=win32 --python-tag=cp37
|
||||||
py -3.7 setup.py bdist_wheel --plat-name=win-amd64 --python-tag=cp37
|
py -3.7 setup.py bdist_wheel --plat-name=win-amd64 --python-tag=cp37
|
||||||
|
|
||||||
|
py -3.8 setup.py bdist_zip --plat-name=win32
|
||||||
|
py -3.8 setup.py bdist_zip --plat-name=win-amd64
|
||||||
|
py -3.8 setup.py bdist_wheel --plat-name=win32 --python-tag=cp38
|
||||||
|
py -3.8 setup.py bdist_wheel --plat-name=win-amd64 --python-tag=cp38
|
||||||
|
|
||||||
|
py -3.9 setup.py bdist_zip --plat-name=win32
|
||||||
|
py -3.9 setup.py bdist_zip --plat-name=win-amd64
|
||||||
|
py -3.9 setup.py bdist_wheel --plat-name=win32 --python-tag=cp39
|
||||||
|
py -3.9 setup.py bdist_wheel --plat-name=win-amd64 --python-tag=cp39
|
||||||
|
|
||||||
|
py setup.py bdist_pdb
|
149
setup/setup.py
149
setup/setup.py
@ -5,10 +5,11 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import zipfile
|
import zipfile
|
||||||
import sys
|
import sys
|
||||||
|
import itertools
|
||||||
|
|
||||||
_name = "pykd"
|
_name = "pykd"
|
||||||
_desc = "python windbg extension"
|
_desc = "python windbg extension"
|
||||||
_version = '0.3.4.0'
|
_version = '0.3.4.15'
|
||||||
|
|
||||||
def getReleaseSrc():
|
def getReleaseSrc():
|
||||||
return 'Release_%d.%d' % sys.version_info[0:2]
|
return 'Release_%d.%d' % sys.version_info[0:2]
|
||||||
@ -60,7 +61,7 @@ if "bdist_wheel" in sys.argv:
|
|||||||
|
|
||||||
elif "bdist_zip" in sys.argv:
|
elif "bdist_zip" in sys.argv:
|
||||||
|
|
||||||
#make package catalog
|
#make package catalog
|
||||||
|
|
||||||
if "--plat-name=win32" in sys.argv:
|
if "--plat-name=win32" in sys.argv:
|
||||||
plat_name="win32"
|
plat_name="win32"
|
||||||
@ -105,6 +106,26 @@ elif "bdist_zip" in sys.argv:
|
|||||||
archive.write( os.path.join(package_dir, srcFile), compress_type = zipfile.ZIP_DEFLATED)
|
archive.write( os.path.join(package_dir, srcFile), compress_type = zipfile.ZIP_DEFLATED)
|
||||||
|
|
||||||
print("OK")
|
print("OK")
|
||||||
|
|
||||||
|
elif "bdist_pdb" in sys.argv:
|
||||||
|
|
||||||
|
#make pdb archive
|
||||||
|
pyVersion = ('2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10', '3.11')
|
||||||
|
platform = ('Win32', 'x64')
|
||||||
|
|
||||||
|
pdbFiles = [ os.path.join( platform, 'Release_' + version, 'pykd.pdb') for version, platform in itertools.product( pyVersion, platform ) ]
|
||||||
|
|
||||||
|
zip_name = "pykd-%s-symbols.zip" % _version
|
||||||
|
|
||||||
|
with zipfile.ZipFile(os.path.join(os.path.curdir, 'dist', zip_name), mode='w' ) as archive:
|
||||||
|
for pdbFile in pdbFiles:
|
||||||
|
print( "zipped %s" % (pdbFile) )
|
||||||
|
archive.write( os.path.join(os.path.curdir, '..', 'out', pdbFile), pdbFile, compress_type = zipfile.ZIP_DEFLATED)
|
||||||
|
|
||||||
|
#pdbFileList = [ os.path.join( os.path.curdir, '..', 'out', fileName) for fileName in (
|
||||||
|
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -122,127 +143,3 @@ elif "bdist_zip" in sys.argv:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#from setuptools import setup
|
|
||||||
#from wheel.bdist_wheel import bdist_wheel
|
|
||||||
#import pkg_resources
|
|
||||||
#import argparse
|
|
||||||
#import os
|
|
||||||
#import shutil
|
|
||||||
#import zipfile
|
|
||||||
#import sys
|
|
||||||
|
|
||||||
#_name = "pykd"
|
|
||||||
#_desc = "python windbg extension"
|
|
||||||
#_version = '0.3.1.2'
|
|
||||||
|
|
||||||
#def getReleaseSrc():
|
|
||||||
# return 'Release_%d.%d' % sys.version_info[0:2]
|
|
||||||
|
|
||||||
#def makeWheel(args):
|
|
||||||
|
|
||||||
# # remove build catalog
|
|
||||||
# build_dir = os.path.join(os.path.curdir, 'build' )
|
|
||||||
# if os.path.exists(build_dir):
|
|
||||||
# shutil.rmtree(build_dir)
|
|
||||||
|
|
||||||
# # make package catalog
|
|
||||||
# package_dir = os.path.join(os.path.curdir, _name )
|
|
||||||
# if os.path.exists(package_dir):
|
|
||||||
# shutil.rmtree(package_dir)
|
|
||||||
# os.mkdir(package_dir)
|
|
||||||
|
|
||||||
# shutil.copy("__init__.py", package_dir)
|
|
||||||
|
|
||||||
# bin_dir = os.path.join( os.path.curdir, '..', 'bin')
|
|
||||||
# pykd_dir = os.path.join( os.path.curdir, '..', 'out')
|
|
||||||
# if args.plat_name == 'win32':
|
|
||||||
# bin_dir = os.path.join( bin_dir, 'x86')
|
|
||||||
# pykd_dir = os.path.join(pykd_dir, 'Win32', getReleaseSrc())
|
|
||||||
# elif args.plat_name == 'win-amd64':
|
|
||||||
# bin_dir = os.path.join( bin_dir, 'x64')
|
|
||||||
# pykd_dir = os.path.join(pykd_dir, 'X64', getReleaseSrc())
|
|
||||||
# else:
|
|
||||||
# assert(0)
|
|
||||||
|
|
||||||
# assert(os.path.isdir(bin_dir))
|
|
||||||
|
|
||||||
# for binFile in [ f for f in os.listdir(bin_dir) if not os.path.isdir(f) ]:
|
|
||||||
# shutil.copy( os.path.join(bin_dir, binFile), os.path.join(package_dir, binFile) )
|
|
||||||
|
|
||||||
# shutil.copy( os.path.join(pykd_dir, 'pykd.pyd'), os.path.join(package_dir, 'pykd.pyd') )
|
|
||||||
|
|
||||||
# setup(
|
|
||||||
# name = _name,
|
|
||||||
# version = _version,
|
|
||||||
# description = _desc,
|
|
||||||
# cmdclass = { 'bdist_wheel' : bdist_wheel },
|
|
||||||
# packages = ['pykd'],
|
|
||||||
# package_dir = {'pykd': package_dir},
|
|
||||||
# package_data = { 'pykd' :["*.pyd", "*.dll"]},
|
|
||||||
# include_package_data=True,
|
|
||||||
# zip_safe = False,
|
|
||||||
# universal = True,
|
|
||||||
# #python_tag = args.python_tag
|
|
||||||
# )
|
|
||||||
|
|
||||||
#def makeZip(args):
|
|
||||||
# #make package catalog
|
|
||||||
|
|
||||||
# package_dir = os.path.join(os.path.curdir, _name )
|
|
||||||
# if os.path.exists(package_dir):
|
|
||||||
# shutil.rmtree(package_dir)
|
|
||||||
# os.mkdir(package_dir)
|
|
||||||
|
|
||||||
# bin_dir = os.path.join( os.path.curdir, '..', 'bin')
|
|
||||||
# pykd_dir = os.path.join( os.path.curdir, '..', 'out')
|
|
||||||
# if args.plat_name == 'win32':
|
|
||||||
# bin_dir = os.path.join( bin_dir, 'x86')
|
|
||||||
# pykd_dir = os.path.join(pykd_dir, 'Win32', getReleaseSrc())
|
|
||||||
# elif args.plat_name == 'win-amd64':
|
|
||||||
# bin_dir = os.path.join( bin_dir, 'x64')
|
|
||||||
# pykd_dir = os.path.join(pykd_dir, 'X64', getReleaseSrc())
|
|
||||||
# else:
|
|
||||||
# assert(0)
|
|
||||||
|
|
||||||
# pyver="%d%d" % sys.version_info[0:2]
|
|
||||||
|
|
||||||
# zip_str = "pykd-%s-py%s-%s" % ( _version, pyver, args.plat_name )
|
|
||||||
# zip_name = zip_str + ".zip"
|
|
||||||
|
|
||||||
# assert(os.path.isdir(bin_dir))
|
|
||||||
|
|
||||||
# for binFile in [ f for f in os.listdir(bin_dir) if not os.path.isdir(f) ]:
|
|
||||||
# shutil.copy( os.path.join(bin_dir, binFile), os.path.join(package_dir, binFile) )
|
|
||||||
|
|
||||||
# shutil.copy( os.path.join(pykd_dir, 'pykd.pyd'), os.path.join(package_dir, 'pykd.pyd') )
|
|
||||||
|
|
||||||
# dist_dir = os.path.join(os.path.curdir, 'dist')
|
|
||||||
# if not os.path.exists(dist_dir):
|
|
||||||
# os.mkdir(dist_dir)
|
|
||||||
|
|
||||||
# with zipfile.ZipFile(os.path.join(os.path.curdir, 'dist', zip_name), mode='w' ) as archive:
|
|
||||||
# for srcFile in os.listdir(package_dir):
|
|
||||||
# print( "zipped %s" % (srcFile) )
|
|
||||||
# archive.write( os.path.join(package_dir, srcFile), compress_type = zipfile.ZIP_DEFLATED)
|
|
||||||
|
|
||||||
# print("OK")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#parser = argparse.ArgumentParser()
|
|
||||||
|
|
||||||
#subparsers = parser.add_subparsers()
|
|
||||||
#wheelParser = subparsers.add_parser('bdist_wheel')
|
|
||||||
#wheelParser.add_argument('--plat-name', choices = ['win32', 'win-amd64'], default=pkg_resources.get_build_platform() )
|
|
||||||
#wheelParser.add_argument('--python-tag', choices=['2.7', '3.5'])
|
|
||||||
#wheelParser.set_defaults(func=makeWheel)
|
|
||||||
|
|
||||||
#zipParser = subparsers.add_parser('bdist_zip')
|
|
||||||
#zipParser.add_argument('--plat-name', choices = ['win32', 'win-amd64'], default=pkg_resources.get_build_platform() )
|
|
||||||
#zipParser.set_defaults(func=makeZip)
|
|
||||||
|
|
||||||
#args = parser.parse_args()
|
|
||||||
#args.func(args)
|
|
||||||
|
|
||||||
|
|
||||||
|
1118
snippets/nbl.py
1118
snippets/nbl.py
File diff suppressed because it is too large
Load Diff
@ -6,7 +6,7 @@ import sys
|
|||||||
|
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
print "python pytowiki.py module_name output_file"
|
print("python pytowiki.py module_name output_file")
|
||||||
|
|
||||||
|
|
||||||
class CodeplexFormatter:
|
class CodeplexFormatter:
|
||||||
@ -99,7 +99,7 @@ def buildDoc( ioStream, formatter, apiInfo ):
|
|||||||
for func in apiInfo.funcs:
|
for func in apiInfo.funcs:
|
||||||
ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) )
|
ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) )
|
||||||
|
|
||||||
ioStream.write( formatter.endl() )
|
ioStream.write( formatter.endl() )
|
||||||
|
|
||||||
ioStream.write( formatter.header2( "Classes" ) )
|
ioStream.write( formatter.header2( "Classes" ) )
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ def buildDoc( ioStream, formatter, apiInfo ):
|
|||||||
ioStream.write( formatter.bulletItem( formatter.link( p[0], cls.__name__ + "." + p[0]) ) )
|
ioStream.write( formatter.bulletItem( formatter.link( p[0], cls.__name__ + "." + p[0]) ) )
|
||||||
ioStream.write( formatter.endl() )
|
ioStream.write( formatter.endl() )
|
||||||
|
|
||||||
methods = filter( lambda m: m.__doc__ != None, cls.methods )
|
methods = list(filter( lambda m: m.__doc__ != None, cls.methods ) )
|
||||||
|
|
||||||
if methods:
|
if methods:
|
||||||
ioStream.write( formatter.header4( "Methods:") )
|
ioStream.write( formatter.header4( "Methods:") )
|
||||||
@ -174,7 +174,7 @@ def main():
|
|||||||
|
|
||||||
module = __import__( moduleName )
|
module = __import__( moduleName )
|
||||||
|
|
||||||
with file( fileName, "w" ) as wikiIo:
|
with open( fileName, "w" ) as wikiIo:
|
||||||
|
|
||||||
apiInfo = ModuleInfo( module )
|
apiInfo = ModuleInfo( module )
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ def main():
|
|||||||
|
|
||||||
except ImportWarning:
|
except ImportWarning:
|
||||||
|
|
||||||
print "failed to import module " + moduleName
|
print("failed to import module ", moduleName)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -6,7 +6,7 @@ import os
|
|||||||
class ARM64DumpTest(unittest.TestCase):
|
class ARM64DumpTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
||||||
r"..\..\kdlibcpp\kdlib\tests\dumps\win10_arm64_mem.cab" )
|
r"..\..\kdlibcpp\kdlib\tests\dumps\win10_arm64_mem\win10_arm64_mem.cab" )
|
||||||
self.dump_id = pykd.loadDump( dump_file )
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
@ -14,41 +14,41 @@ class ARM64DumpTest(unittest.TestCase):
|
|||||||
|
|
||||||
def testArm64(self):
|
def testArm64(self):
|
||||||
# dbgmem
|
# dbgmem
|
||||||
self.assertEqual( 0, pykd.addr64(0) )
|
self.assertEqual( 0, pykd.addr64(0) )
|
||||||
self.assertEqual( 0x80000000, pykd.addr64(0x80000000) )
|
self.assertEqual( 0x80000000, pykd.addr64(0x80000000) )
|
||||||
|
|
||||||
# dbgeng
|
# dbgeng
|
||||||
self.assertEqual( pykd.CPUType.ARM64, pykd.getCPUType() )
|
self.assertEqual( pykd.CPUType.ARM64, pykd.getCPUType() )
|
||||||
self.assertEqual( pykd.CPUType.ARM64, pykd.getCPUMode() )
|
self.assertEqual( pykd.CPUType.ARM64, pykd.getCPUMode() )
|
||||||
|
|
||||||
self.assertTrue( pykd.is64bitSystem() )
|
self.assertTrue( pykd.is64bitSystem() )
|
||||||
self.assertEqual( 8, pykd.ptrSize() )
|
self.assertEqual( 8, pykd.ptrSize() )
|
||||||
|
|
||||||
self.assertEqual( pykd.expr("@$retreg"), pykd.reg("x0") )
|
self.assertEqual( pykd.expr("@$retreg"), pykd.reg("x0") )
|
||||||
|
|
||||||
# typeinfo
|
# typeinfo
|
||||||
self.assertEqual( 8, pykd.typeInfo("nt!_IRP*").size() )
|
self.assertEqual( 8, pykd.typeInfo("nt!_IRP*").size() )
|
||||||
|
|
||||||
# symexport
|
# symexport
|
||||||
self.assertEqual( pykd.expr("clipsp!ClipSpInitialize"), pykd.module("clipsp").ClipSpInitialize )
|
self.assertEqual( pykd.expr("clipsp!ClipSpInitialize"), pykd.module("clipsp").ClipSpInitialize )
|
||||||
|
|
||||||
# cpu context
|
# cpu context
|
||||||
cpu = pykd.cpu()
|
cpu = pykd.cpu()
|
||||||
self.assertEqual( pykd.expr("@$ip"), cpu.ip )
|
self.assertEqual( pykd.expr("@$ip"), cpu.ip )
|
||||||
self.assertEqual( pykd.expr("@$csp"), cpu.sp )
|
self.assertEqual( pykd.expr("@$csp"), cpu.sp )
|
||||||
self.assertEqual( pykd.expr("@fp"), cpu.fp )
|
self.assertEqual( pykd.expr("@fp"), cpu.fp )
|
||||||
|
|
||||||
# stack
|
# stack
|
||||||
stack = pykd.getStack()
|
stack = pykd.getStack()
|
||||||
|
|
||||||
self.assertTrue( len(stack) > 11 )
|
self.assertTrue( len(stack) > 11 )
|
||||||
|
|
||||||
self.assertEqual( "nt!KeBugCheck2", pykd.findSymbol(stack[0].ip, False) )
|
self.assertEqual( "nt!KeBugCheck2", pykd.findSymbol(stack[0].ip, False) )
|
||||||
|
|
||||||
self.assertEqual( "Wdf01000!FxRequest::CompleteInternal", pykd.findSymbol(stack[11].ip, False) )
|
self.assertEqual( "Wdf01000!FxRequest::CompleteInternal", pykd.findSymbol(stack[11].ip, False) )
|
||||||
self.assertEqual( 0, stack[11].getParam("Status") )
|
self.assertEqual( 0, stack[11].getParam("Status") )
|
||||||
self.assertEqual( 0xffffc18eaa798940, stack[11].getLocal("irp").m_Irp )
|
self.assertEqual( 0xffffc18eaa798940, stack[11].getLocal("irp").m_Irp )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import os
|
|||||||
class ARMDumpTest(unittest.TestCase):
|
class ARMDumpTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
||||||
r"..\..\kdlibcpp\kdlib\tests\dumps\win10_arm_rpi3_mem.cab" )
|
r"..\..\kdlibcpp\kdlib\tests\dumps\win10_arm_rpi3_mem\win10_arm_rpi3_mem.cab" )
|
||||||
self.dump_id = pykd.loadDump( dump_file )
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
@ -3,23 +3,36 @@ import unittest
|
|||||||
import target
|
import target
|
||||||
import pykd
|
import pykd
|
||||||
|
|
||||||
class handler( pykd.eventHandler ):
|
class OutHandler( pykd.eventHandler ):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pykd.eventHandler.__init__(self)
|
pykd.eventHandler.__init__(self)
|
||||||
self.counter=0
|
self.out_counter=0
|
||||||
|
self.verbose_counter = 0
|
||||||
def onException(self, param):
|
|
||||||
self.counter += 1
|
|
||||||
return pykd.DEBUG_STATUS_NO_CHANGE
|
|
||||||
|
|
||||||
def onExecutionStatusChange(self,status):
|
def onDebugOutput(self, text, mask):
|
||||||
print status
|
if mask == pykd.outputFlag.Normal:
|
||||||
|
self.out_counter += 1
|
||||||
|
elif mask == pykd.outputFlag.Verbose:
|
||||||
|
self.verbose_counter += 1
|
||||||
|
|
||||||
class EventTest( unittest.TestCase ):
|
class OutputHandlerTest( unittest.TestCase ):
|
||||||
|
|
||||||
def testDebugBreak( self ):
|
def setUp(self):
|
||||||
h = handler()
|
self.oldMask = pykd.getOutputMask()
|
||||||
pykd.go()
|
self.handler = OutHandler()
|
||||||
pykd.go()
|
|
||||||
self.assertEqual( 2, h.counter )
|
def tearDown(self):
|
||||||
|
pykd.killAllProcesses()
|
||||||
|
pykd.setOutputMask(self.oldMask)
|
||||||
|
|
||||||
|
def testDebugOutput(self):
|
||||||
|
pykd.startProcess( target.appPath )
|
||||||
|
self.assertTrue( 0 < self.handler.out_counter)
|
||||||
|
self.assertFalse( 0 < self.handler.verbose_counter)
|
||||||
|
|
||||||
|
def testDebugOutputMask(self):
|
||||||
|
pykd.setOutputMask(pykd.outputFlag.Normal | pykd.outputFlag.Verbose)
|
||||||
|
pykd.startProcess( target.appPath )
|
||||||
|
self.assertTrue( 0 < self.handler.out_counter)
|
||||||
|
self.assertTrue( 0 < self.handler.verbose_counter)
|
@ -182,6 +182,12 @@ class MemoryTest( unittest.TestCase ):
|
|||||||
self.assertTrue( pykd.isValid( target.module.begin() ) )
|
self.assertTrue( pykd.isValid( target.module.begin() ) )
|
||||||
self.assertFalse( pykd.isValid( 0 ) )
|
self.assertFalse( pykd.isValid( 0 ) )
|
||||||
self.assertFalse( pykd.isValid( 0xDEADBEAF ) )
|
self.assertFalse( pykd.isValid( 0xDEADBEAF ) )
|
||||||
|
|
||||||
|
def testVaAttrib(self):
|
||||||
|
self.assertEqual( \
|
||||||
|
(pykd.memoryProtect.PageWriteCopy, pykd.memoryState.Commit, pykd.memoryType.Image), \
|
||||||
|
pykd.getVaAttributes(target.module.begin()) \
|
||||||
|
)
|
||||||
|
|
||||||
def testPtrList( self ):
|
def testPtrList( self ):
|
||||||
lst = pykd.loadPtrList( target.module.g_listHead )
|
lst = pykd.loadPtrList( target.module.g_listHead )
|
||||||
|
@ -139,4 +139,25 @@ class ModuleTest( unittest.TestCase ):
|
|||||||
def testModuleList(self):
|
def testModuleList(self):
|
||||||
self.assertTrue( [] != pykd.getModulesList() )
|
self.assertTrue( [] != pykd.getModulesList() )
|
||||||
|
|
||||||
|
def testContain(self):
|
||||||
|
self.assertTrue("voidPtr" in target.module)
|
||||||
|
self.assertTrue("structTest" in target.module)
|
||||||
|
self.assertFalse("NotExist" in target.module)
|
||||||
|
self.assertRaises(Exception, lambda md : 2 in md, target.module)
|
||||||
|
|
||||||
|
def testGetByKey(self):
|
||||||
|
self.assertFalse(None == target.module["voidPtr"])
|
||||||
|
self.assertFalse(None == target.module["structTest"] )
|
||||||
|
self.assertRaises(KeyError, lambda md : target.module["Not Exist"], target.module)
|
||||||
|
|
||||||
|
def testEvalInModuleScope(self):
|
||||||
|
self.assertEqual( target.module.rva('voidPtr'), eval("voidPtr - %#x" % target.module.begin(), globals(), target.module) )
|
||||||
|
|
||||||
|
def testHasSymbol(self):
|
||||||
|
self.assertTrue(target.module.hasSymbol("voidPtr"))
|
||||||
|
self.assertTrue(target.module.hasSymbol("structTest"))
|
||||||
|
self.assertFalse(target.module.hasSymbol("notExists"))
|
||||||
|
|
||||||
|
def testPrint(self):
|
||||||
|
modAsStr = str(target.module)
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ import synsymtest
|
|||||||
import taggedtest
|
import taggedtest
|
||||||
import arm64dumptest
|
import arm64dumptest
|
||||||
import armdumptest
|
import armdumptest
|
||||||
|
import eventtest
|
||||||
|
|
||||||
pykd.initialize()
|
pykd.initialize()
|
||||||
|
|
||||||
@ -65,13 +66,17 @@ def getTestSuite( singleName = "" ):
|
|||||||
|
|
||||||
unittest.TestLoader().loadTestsFromTestCase( breakpoint.BreakpointTest ),
|
unittest.TestLoader().loadTestsFromTestCase( breakpoint.BreakpointTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( stacktest.StackTest ),
|
unittest.TestLoader().loadTestsFromTestCase( stacktest.StackTest ),
|
||||||
|
unittest.TestLoader().loadTestsFromTestCase( stacktest.InlineStackTest ),
|
||||||
|
unittest.TestLoader().loadTestsFromTestCase( stacktest.DiaRegToRegRelativeI386Test ),
|
||||||
|
unittest.TestLoader().loadTestsFromTestCase( stacktest.DiaRegToRegRelativeAmd64Test ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( mspdbtest.MsPdbTest ),
|
unittest.TestLoader().loadTestsFromTestCase( mspdbtest.MsPdbTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( targetprocess.ProcessTest ),
|
unittest.TestLoader().loadTestsFromTestCase( targetprocess.ProcessTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( ehloadtest.EhLoadTest ),
|
unittest.TestLoader().loadTestsFromTestCase( ehloadtest.EhLoadTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( taggedtest.TaggedTest ),
|
unittest.TestLoader().loadTestsFromTestCase( taggedtest.TaggedTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( arm64dumptest.ARM64DumpTest ),
|
unittest.TestLoader().loadTestsFromTestCase( arm64dumptest.ARM64DumpTest ),
|
||||||
unittest.TestLoader().loadTestsFromTestCase( armdumptest.ARMDumpTest ),
|
unittest.TestLoader().loadTestsFromTestCase( armdumptest.ARMDumpTest ),
|
||||||
|
unittest.TestLoader().loadTestsFromTestCase( eventtest.OutputHandlerTest ),
|
||||||
|
|
||||||
#unittest.TestLoader().loadTestsFromTestCase( excepttest.ExceptionTest ),
|
#unittest.TestLoader().loadTestsFromTestCase( excepttest.ExceptionTest ),
|
||||||
] )
|
] )
|
||||||
else:
|
else:
|
||||||
@ -91,7 +96,7 @@ if __name__ == "__main__":
|
|||||||
target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0]
|
target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0]
|
||||||
|
|
||||||
unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() )
|
unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() )
|
||||||
#unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("typedvar.TypedVarTest.testAttr") )
|
#unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("typedvar.TypedVarTest.testEvalExprScopeLong") )
|
||||||
|
|
||||||
try: input = raw_input
|
try: input = raw_input
|
||||||
except NameError: pass
|
except NameError: pass
|
||||||
|
@ -8,18 +8,18 @@
|
|||||||
<StartupFile>pykdtest.py</StartupFile>
|
<StartupFile>pykdtest.py</StartupFile>
|
||||||
<SearchPath>
|
<SearchPath>
|
||||||
</SearchPath>
|
</SearchPath>
|
||||||
<WorkingDirectory>..\..\out\x64\Debug_2.7</WorkingDirectory>
|
<WorkingDirectory>C:\Users\User\Documents\projects\pykd2017\out\x64\Debug_3.7</WorkingDirectory>
|
||||||
<OutputPath>.</OutputPath>
|
<OutputPath>.</OutputPath>
|
||||||
<Name>pykdtest</Name>
|
<Name>pykdtest</Name>
|
||||||
<RootNamespace>pykdtest</RootNamespace>
|
<RootNamespace>pykdtest</RootNamespace>
|
||||||
<LaunchProvider>Standard Python launcher</LaunchProvider>
|
<LaunchProvider>Standard Python launcher</LaunchProvider>
|
||||||
<CommandLineArguments>C:\proj\pykd-dev\out\x64\Debug\targetapp.exe</CommandLineArguments>
|
<CommandLineArguments>C:\Users\User\Documents\projects\pykd2017\out\x64\Debug_2.7\targetapp.exe</CommandLineArguments>
|
||||||
<InterpreterPath />
|
<InterpreterPath />
|
||||||
<InterpreterArguments>
|
<InterpreterArguments>
|
||||||
</InterpreterArguments>
|
</InterpreterArguments>
|
||||||
<EnableNativeCodeDebugging>True</EnableNativeCodeDebugging>
|
<EnableNativeCodeDebugging>True</EnableNativeCodeDebugging>
|
||||||
<IsWindowsApplication>False</IsWindowsApplication>
|
<IsWindowsApplication>False</IsWindowsApplication>
|
||||||
<InterpreterId>Global|PythonCore|2.7</InterpreterId>
|
<InterpreterId>Global|PythonCore|3.7</InterpreterId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -63,6 +63,8 @@
|
|||||||
<InterpreterReference Include="Global|PythonCore|2.7-32" />
|
<InterpreterReference Include="Global|PythonCore|2.7-32" />
|
||||||
<InterpreterReference Include="Global|PythonCore|2.7" />
|
<InterpreterReference Include="Global|PythonCore|2.7" />
|
||||||
<InterpreterReference Include="Global|PythonCore|3.6" />
|
<InterpreterReference Include="Global|PythonCore|3.6" />
|
||||||
|
<InterpreterReference Include="Global|PythonCore|3.7" />
|
||||||
|
<InterpreterReference Include="Global|PythonCore|3.7-32" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" />
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
import pykd
|
import pykd
|
||||||
import target
|
import target
|
||||||
|
|
||||||
@ -55,3 +58,81 @@ class StackTest(unittest.TestCase):
|
|||||||
self.assertEqual(0, len(topFrame.getLocals()))
|
self.assertEqual(0, len(topFrame.getLocals()))
|
||||||
|
|
||||||
|
|
||||||
|
class InlineStackTest(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
dumpDir = os.path.join( os.path.dirname(sys.argv[0]), r"..\..\kdlibcpp\kdlib\tests\dumps\targetapp_stacktest_x64_release")
|
||||||
|
dump_file = os.path.join( dumpDir, "targetapp_stacktest_x64_release.cab" )
|
||||||
|
self.symbolPath = pykd.getSymbolPath()
|
||||||
|
symbolPath = self.symbolPath + ";" + dumpDir
|
||||||
|
pykd.setSymbolPath(symbolPath)
|
||||||
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pykd.closeDump( self.dump_id )
|
||||||
|
pykd.setSymbolPath(self.symbolPath)
|
||||||
|
|
||||||
|
def testGetStack(self):
|
||||||
|
|
||||||
|
expectedStack = [
|
||||||
|
'targetapp!stackTestClass::stackMethod',
|
||||||
|
'targetapp!stackTestRun2',
|
||||||
|
'targetapp!stackTestRun1',
|
||||||
|
'targetapp!stackTestRun']
|
||||||
|
|
||||||
|
realStack = []
|
||||||
|
for frame in pykd.getStack(inlineFrames = True):
|
||||||
|
moduleName, symbolName, disp = frame.findSymbol()
|
||||||
|
realStack.append( "%s!%s" % ( moduleName, symbolName ) )
|
||||||
|
|
||||||
|
self.assertEqual( expectedStack, realStack[0:4])
|
||||||
|
|
||||||
|
def testFrameIsInline(self):
|
||||||
|
self.assertEqual([True, True, False, True],
|
||||||
|
[fr.isInline() for fr in pykd.getStack(inlineFrames = True)][:4]
|
||||||
|
)
|
||||||
|
|
||||||
|
def testGetSourceLine(self):
|
||||||
|
|
||||||
|
expectedStack = ['targetapp.cpp+129', 'targetapp.cpp+144', 'targetapp.cpp+172', 'targetapp.cpp+185']
|
||||||
|
|
||||||
|
realStack = []
|
||||||
|
for frame in pykd.getStack(inlineFrames = True)[:4]:
|
||||||
|
fileName, lineNo = frame.getSourceLine()
|
||||||
|
realStack.append("%s+%s" % ( os.path.basename(fileName), lineNo ) )
|
||||||
|
|
||||||
|
self.assertEqual( expectedStack, realStack)
|
||||||
|
|
||||||
|
class DiaRegToRegRelativeI386Test(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
dumpDir = os.path.join( os.path.dirname(sys.argv[0]), r"..\..\kdlibcpp\kdlib\tests\dumps\targetapp_test_cv_allreg_i386")
|
||||||
|
dump_file = os.path.join( dumpDir, "targetapp_test_cv_allreg_i386.cab" )
|
||||||
|
self.symbolPath = pykd.getSymbolPath()
|
||||||
|
symbolPath = self.symbolPath + ";" + dumpDir
|
||||||
|
pykd.setSymbolPath(symbolPath)
|
||||||
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pykd.closeDump( self.dump_id )
|
||||||
|
pykd.setSymbolPath(self.symbolPath)
|
||||||
|
|
||||||
|
def testParams(self):
|
||||||
|
params = pykd.getFrame().getParams()
|
||||||
|
self.assertNotEqual(0, len(params))
|
||||||
|
|
||||||
|
class DiaRegToRegRelativeAmd64Test(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
dumpDir = os.path.join( os.path.dirname(sys.argv[0]), r"..\..\kdlibcpp\kdlib\tests\dumps\targetapp_test_cv_allreg_amd64")
|
||||||
|
dump_file = os.path.join( dumpDir, "targetapp_test_cv_allreg_amd64.cab" )
|
||||||
|
self.symbolPath = pykd.getSymbolPath()
|
||||||
|
symbolPath = self.symbolPath + ";" + dumpDir
|
||||||
|
pykd.setSymbolPath(symbolPath)
|
||||||
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pykd.closeDump( self.dump_id )
|
||||||
|
pykd.setSymbolPath(self.symbolPath)
|
||||||
|
|
||||||
|
def testLocals(self):
|
||||||
|
locals = pykd.getFrame().getLocals()
|
||||||
|
self.assertNotEqual(0, len(locals))
|
||||||
|
@ -28,3 +28,15 @@ class SynSymTest(unittest.TestCase):
|
|||||||
self.assertRaises( pykd.DbgException, target.module.offset, "synSym2" )
|
self.assertRaises( pykd.DbgException, target.module.offset, "synSym2" )
|
||||||
|
|
||||||
self.assertRaises( pykd.DbgException, pykd.removeSyntheticSymbol, _synsym )
|
self.assertRaises( pykd.DbgException, pykd.removeSyntheticSymbol, _synsym )
|
||||||
|
|
||||||
|
def testModule(self):
|
||||||
|
"""Add and remove synthetic module"""
|
||||||
|
base = 64 * 1024
|
||||||
|
|
||||||
|
pykd.addSyntheticModule(base, 1024, "artificial_module1")
|
||||||
|
pykd.addSyntheticModule(base + 1024, 1024, "artificial_module2", "artificial_module2_path")
|
||||||
|
|
||||||
|
pykd.removeSyntheticSymbol( pykd.addSyntheticSymbol(base, 1, "artificial_symbol") )
|
||||||
|
|
||||||
|
pykd.removeSyntheticModule(base + 1024)
|
||||||
|
pykd.removeSyntheticModule(base)
|
||||||
|
@ -6,7 +6,7 @@ import os
|
|||||||
class TaggedTest(unittest.TestCase):
|
class TaggedTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
dump_file = os.path.join( os.path.dirname(sys.argv[0]),
|
||||||
r"..\..\kdlibcpp\kdlib\tests\dumps\win8_x64_mem.cab" )
|
r"..\..\kdlibcpp\kdlib\tests\dumps\win8_x64_mem\win8_x64_mem.cab" )
|
||||||
self.dump_id = pykd.loadDump( dump_file )
|
self.dump_id = pykd.loadDump( dump_file )
|
||||||
|
|
||||||
self._existing_id = "D03DC06F-D88E-44C5-BA2A-FAE035172D19"
|
self._existing_id = "D03DC06F-D88E-44C5-BA2A-FAE035172D19"
|
||||||
|
@ -21,6 +21,14 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
tv = pykd.typedVar( "g_structTest" )
|
tv = pykd.typedVar( "g_structTest" )
|
||||||
tv = pykd.typedVar( target.moduleName + "!g_structTest" )
|
tv = pykd.typedVar( target.moduleName + "!g_structTest" )
|
||||||
|
|
||||||
|
|
||||||
|
def testCompareWithNone(self):
|
||||||
|
tv = target.module.typedVar( "ucharVar" )
|
||||||
|
self.assertFalse(tv == None)
|
||||||
|
self.assertTrue(tv != None)
|
||||||
|
self.assertFalse(not tv)
|
||||||
|
self.assertTrue(tv)
|
||||||
|
|
||||||
def testBaseTypes(self):
|
def testBaseTypes(self):
|
||||||
self.assertEqual( 10, target.module.typedVar( "ucharVar" ) )
|
self.assertEqual( 10, target.module.typedVar( "ucharVar" ) )
|
||||||
self.assertEqual( 1020, target.module.typedVar( "ushortVar" ) )
|
self.assertEqual( 1020, target.module.typedVar( "ushortVar" ) )
|
||||||
@ -295,8 +303,8 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
def testUdtSubscribe(self):
|
def testUdtSubscribe(self):
|
||||||
tv = pykd.typedVar( "g_virtChild" )
|
tv = pykd.typedVar( "g_virtChild" )
|
||||||
self.assertEqual( 6, len(tv) )
|
self.assertEqual( 6, len(tv) )
|
||||||
fieldName = tv.fieldName(5)
|
fieldName = tv.fieldName(3)
|
||||||
fieldVal = tv.field(5)
|
fieldVal = tv.field(3)
|
||||||
|
|
||||||
self.assertEqual( fieldName, "m_baseField" )
|
self.assertEqual( fieldName, "m_baseField" )
|
||||||
self.assertEqual( fieldVal, tv.m_baseField )
|
self.assertEqual( fieldVal, tv.m_baseField )
|
||||||
@ -437,10 +445,60 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
|
|
||||||
def testAttr(self):
|
def testAttr(self):
|
||||||
var = target.module.typedVar("structTest", [0x55] * 20 )
|
var = target.module.typedVar("structTest", [0x55] * 20 )
|
||||||
self.assertTrue(hasattr(var, "m_field3"))
|
|
||||||
setattr(var, "m_field1", 11)
|
setattr(var, "m_field1", 11)
|
||||||
self.assertEqual(11, getattr(var, "m_field1"))
|
self.assertEqual(11, getattr(var, "m_field1"))
|
||||||
|
self.assertRaises(AttributeError, lambda x: getattr(x, "noexists"), var)
|
||||||
|
|
||||||
|
def testEvalPyScope(self):
|
||||||
|
var = target.module.typedVar("structTest", [0x55] * 20 )
|
||||||
|
self.assertEqual( var.m_field1 * 17, eval("m_field1 * 17", globals(), var) )
|
||||||
|
|
||||||
|
def testEvalExpr(self):
|
||||||
|
self.assertEqual( 2+2, pykd.evalExpr("2+2") )
|
||||||
|
self.assertEqual( target.module.typedVar("g_structTest").m_field1, pykd.evalExpr("g_structTest.m_field1") )
|
||||||
|
self.assertEqual( target.module.typedVar("g_testArray")[1].m_field3, pykd.evalExpr("(g_testArray + 1)->m_field3") )
|
||||||
|
|
||||||
|
def testEvalExprScope(self):
|
||||||
|
|
||||||
|
v1 = target.module.typedVar( "ulongVar" )
|
||||||
|
v2 = target.module.typedVar( "g_structTest" )
|
||||||
|
|
||||||
|
scope = { "v1" : v1, "v2" : v2 }
|
||||||
|
self.assertEqual( v1 + v2.m_field1, pykd.evalExpr("v1 + v2.m_field1", scope) )
|
||||||
|
|
||||||
|
def testEvalExprScopeLong(self):
|
||||||
|
v1 = 100
|
||||||
|
v2 = -500
|
||||||
|
scope = { "v1" : v1, "v2" : v2 }
|
||||||
|
self.assertEqual( v1 + v2, pykd.evalExpr("v1 + v2", scope))
|
||||||
|
self.assertEqual( v1 * v2, pykd.evalExpr("v1 * v2", locals()))
|
||||||
|
|
||||||
|
def testEvalExprScopeStruct(self):
|
||||||
|
var = pykd.typedVar("g_structTest1")
|
||||||
|
self.assertEqual(var.m_field1, pykd.evalExpr("m_field1", var))
|
||||||
|
self.assertEqual(var.m_field4.deref().m_field1, pykd.evalExpr("m_field4->m_field1", var))
|
||||||
|
|
||||||
|
def testEvalExprSizeof(self):
|
||||||
|
self.assertEqual(4, pykd.evalExpr("sizeof(int)"))
|
||||||
|
self.assertEqual(4, pykd.evalExpr("sizeof(int&)"))
|
||||||
|
self.assertEqual(pykd.ptrSize() * 10, pykd.evalExpr("sizeof(int*[10])"))
|
||||||
|
self.assertEqual(pykd.ptrSize(), pykd.evalExpr("sizeof(int(*)[10])"))
|
||||||
|
|
||||||
|
def testContain(self):
|
||||||
|
var = pykd.typedVar("g_structTest")
|
||||||
|
self.assertTrue("m_field1" in var)
|
||||||
|
self.assertFalse("NotExist" in var)
|
||||||
|
self.assertRaises(Exception, lambda var : 2 in var, var)
|
||||||
|
|
||||||
|
def testHasField(self):
|
||||||
|
var = pykd.typedVar("g_structTest")
|
||||||
|
self.assertTrue(var.hasField("m_field1"))
|
||||||
|
self.assertFalse(var.hasField("NotExist"))
|
||||||
|
|
||||||
|
def testHasMethod(self):
|
||||||
|
var = pykd.typedVar("g_classChild")
|
||||||
|
self.assertTrue(var.hasMethod("childMethod"))
|
||||||
|
self.assertTrue(var.hasMethod("staticMethod"))
|
||||||
|
self.assertTrue(var.hasMethod("virtMethod1"))
|
||||||
|
self.assertFalse(var.hasMethod("notExist"))
|
||||||
|
|
||||||
self.assertFalse(hasattr(var, "noexisit"))
|
|
||||||
self.assertRaises(AttributeError, getattr, *(var, "noexists"))
|
|
||||||
self.assertRaises(AttributeError, setattr, *(var, "noexists", 0))
|
|
||||||
|
@ -40,11 +40,9 @@ class TypeInfoTest( unittest.TestCase ):
|
|||||||
""" get field of the complex type """
|
""" get field of the complex type """
|
||||||
ti1 = target.module.type( "structTest" )
|
ti1 = target.module.type( "structTest" )
|
||||||
self.assertTrue( "UInt4B", ti1.m_field0.name() )
|
self.assertTrue( "UInt4B", ti1.m_field0.name() )
|
||||||
self.assertTrue( "UInt4B", ti1["m_field0"].name() )
|
self.assertTrue( "m_field0" in ti1 )
|
||||||
self.assertTrue( hasattr( ti1, "m_field0" ) )
|
self.assertFalse( "not_exist" in ti1) # non-exsisting field
|
||||||
self.assertFalse( hasattr( ti1, "not_exists" ) )
|
|
||||||
self.assertRaises( AttributeError, lambda t: t.not_exists, ti1) # non-exsisting field
|
self.assertRaises( AttributeError, lambda t: t.not_exists, ti1) # non-exsisting field
|
||||||
self.assertRaises( KeyError, lambda t: t["not_exists"], ti1) # non-exsisting field
|
|
||||||
|
|
||||||
|
|
||||||
def testBaseTypes( self ):
|
def testBaseTypes( self ):
|
||||||
@ -164,21 +162,21 @@ class TypeInfoTest( unittest.TestCase ):
|
|||||||
self.assertEqual( "structTest", ti.deref().name() )
|
self.assertEqual( "structTest", ti.deref().name() )
|
||||||
|
|
||||||
ti = pykd.typeInfo("structTest[2]")
|
ti = pykd.typeInfo("structTest[2]")
|
||||||
self.assertRaises( pykd.TypeException, ti.deref );
|
self.assertEqual( "structTest", ti.deref().name() )
|
||||||
|
|
||||||
ti = target.module.type("classChild")
|
ti = target.module.type("classChild")
|
||||||
self.assertRaises( pykd.TypeException, ti.deref );
|
self.assertRaises( pykd.TypeException, ti.deref )
|
||||||
|
|
||||||
def testNestedStruct( self ):
|
def testNestedStruct( self ):
|
||||||
ti = target.module.type("structWithNested")
|
ti = target.module.type("structWithNested")
|
||||||
self.assertTrue( hasattr( ti, "m_field" ) )
|
self.assertTrue( ti.hasField("m_field"))
|
||||||
self.assertTrue( hasattr( ti, "m_field3" ) )
|
self.assertTrue( ti.hasField("m_field3"))
|
||||||
self.assertTrue( hasattr( ti, "m_unnameStruct" ) )
|
self.assertTrue( ti.hasField("m_unnameStruct"))
|
||||||
self.assertTrue( hasattr( ti.m_unnameStruct, "m_field2" ) )
|
self.assertTrue( ti.m_unnameStruct.hasField("m_field2"))
|
||||||
self.assertFalse( hasattr( ti, "m_field2" ) )
|
self.assertFalse( ti.hasField( "m_field2" ) )
|
||||||
self.assertFalse( hasattr( ti, "m_nestedFiled" ) )
|
self.assertFalse( ti.hasField( "m_nestedFiled" ) )
|
||||||
ti = target.module.type("structWithNested::Nested")
|
ti = target.module.type("structWithNested::Nested")
|
||||||
self.assertTrue( hasattr( ti, "m_nestedFiled" ) )
|
self.assertTrue( ti.hasField( "m_nestedFiled" ) )
|
||||||
|
|
||||||
def testPrint(self):
|
def testPrint(self):
|
||||||
self.assertTrue( str(target.module.type( "ucharVar" ) ) )
|
self.assertTrue( str(target.module.type( "ucharVar" ) ) )
|
||||||
@ -244,16 +242,12 @@ class TypeInfoTest( unittest.TestCase ):
|
|||||||
ti = pykd.typeInfo("UInt8B").arrayOf(10)
|
ti = pykd.typeInfo("UInt8B").arrayOf(10)
|
||||||
self.assertTrue( "UInt8B[10]", ti.name() )
|
self.assertTrue( "UInt8B[10]", ti.name() )
|
||||||
|
|
||||||
def testCompareWihNone(self):
|
def testCompareWithNone(self):
|
||||||
ti = pykd.typeInfo("UInt8B")
|
ti = pykd.typeInfo("UInt8B")
|
||||||
if ti == None:
|
self.assertFalse(ti == None)
|
||||||
pass
|
self.assertTrue(ti != None)
|
||||||
if ti != None:
|
self.assertFalse(not ti)
|
||||||
pass
|
self.assertTrue(ti)
|
||||||
if not ti:
|
|
||||||
pass
|
|
||||||
if ti:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def testFunction(self):
|
def testFunction(self):
|
||||||
functype = target.module.typedVar( "CdeclFuncPtr" ).type().deref()
|
functype = target.module.typedVar( "CdeclFuncPtr" ).type().deref()
|
||||||
@ -351,17 +345,48 @@ class TypeInfoTest( unittest.TestCase ):
|
|||||||
self.assertEqual( classChild.baseClassOffset(0), classChild.baseClassOffset('classBase1'))
|
self.assertEqual( classChild.baseClassOffset(0), classChild.baseClassOffset('classBase1'))
|
||||||
self.assertEqual(classChild.baseClassOffset(1), classChild.baseClassOffset('classBase2'))
|
self.assertEqual(classChild.baseClassOffset(1), classChild.baseClassOffset('classBase2'))
|
||||||
|
|
||||||
|
|
||||||
def testPdbTypeProvider(self):
|
def testPdbTypeProvider(self):
|
||||||
pdb = target.module.symfile()
|
pdb = target.module.symfile()
|
||||||
typeProvider = pykd.getTypeInfoProviderFromPdb(pdb)
|
typeProvider = pykd.getTypeInfoProviderFromPdb(pdb)
|
||||||
self.assertEqual("structTest", typeProvider.getTypeByName("structTest").name())
|
self.assertEqual("structTest", typeProvider.getTypeByName("structTest").name())
|
||||||
self.assertEqual("structTest", typeProvider.structTest.name())
|
self.assertEqual("structTest", typeProvider.structTest.name())
|
||||||
self.assertEqual(22, len(list(typeProvider.typeIterator("*struct*"))))
|
self.assertEqual(15, len(list(typeProvider.typeIterator("*struct*"))))
|
||||||
|
|
||||||
def testScopeName(self):
|
def testScopeName(self):
|
||||||
self.assertEqual( target.module.name(), pykd.typeInfo( "structTest" ).scopeName() )
|
self.assertEqual( target.module.name(), pykd.typeInfo( "structTest" ).scopeName() )
|
||||||
self.assertEqual( target.module.name(), pykd.typeInfo( "structWithNested::Nested" ).scopeName() )
|
self.assertEqual( target.module.name(), pykd.typeInfo( "structWithNested::Nested" ).scopeName() )
|
||||||
|
|
||||||
|
def testContain(self):
|
||||||
|
ti = target.module.type( "structTest" )
|
||||||
|
self.assertTrue("m_field1" in ti)
|
||||||
|
self.assertFalse("NotExist" in ti)
|
||||||
|
self.assertRaises(Exception, lambda t : 2 in t, ti)
|
||||||
|
|
||||||
|
def testTemplateType(self):
|
||||||
|
ti = target.module.type("g_testTemplateTwoTypes")
|
||||||
|
self.assertTrue(ti.isTemplate)
|
||||||
|
self.assertEqual(['int', 'TestClassTemplate<int>'], ti.getTemplateArgs() )
|
||||||
|
|
||||||
|
def testMembers(self):
|
||||||
|
self.assertEqual(
|
||||||
|
['__VFN_table', '__VFN_table', 'm_staticConst', 'm_staticField', 'm_childField',
|
||||||
|
'm_childField2', 'm_childField3', 'm_enumField'],
|
||||||
|
[ member[0] for member in pykd.typeInfo( "classChild" ).members() ])
|
||||||
|
|
||||||
|
def testIsStaticField(self):
|
||||||
|
ti = pykd.typeInfo("classChild")
|
||||||
|
self.assertTrue(ti.isStaticField("m_staticField"))
|
||||||
|
self.assertFalse(ti.isStaticField("m_baseField"))
|
||||||
|
|
||||||
|
def testIsConstField(self):
|
||||||
|
ti = pykd.typeInfo("classChild")
|
||||||
|
self.assertTrue(ti.isStaticField("m_staticConst"))
|
||||||
|
self.assertFalse(ti.isConstField("m_staticConst"))
|
||||||
|
|
||||||
|
#def testClangCompile(self):
|
||||||
|
# src_code = '#include <windows.h>\r\n'
|
||||||
|
# include_path = '"C:/Program Files (x86)/Windows Kits/8.1/Include/um";"C:/Program Files (x86)/Windows Kits/8.1/Include/shared'
|
||||||
|
# compile_opts = '-I%s -w' % include_path
|
||||||
|
# symbolEnum = pykd.getSymbolProviderFromSource(src_code, compile_opts)
|
||||||
|
# for symName, _, symType in symbolEnum :
|
||||||
|
# print( symName, symType.name() )
|
Loading…
Reference in New Issue
Block a user