我尝试了很多事情,但是由于某种原因,我无法使事情正常进行。我正在尝试使用Python脚本运行MS VS的dumpbin实用程序。
这是我尝试过的(对我不起作用的)
1。
tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
command = '"C:/Program Files/Microsoft Visual Studio 8/VC/bin/dumpbin" /EXPORTS ' + dllFilePath
process = subprocess.Popen(command, stdout=tempFile)
process.wait()
tempFile.close()
Run Code Online (Sandbox Code Playgroud)
2。
tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
command = 'C:/Program Files/Microsoft Visual Studio 8/VC/bin/dumpbin /EXPORTS ' + dllFilePath
process = subprocess.Popen(command, stdout=tempFile)
process.wait()
tempFile.close()
Run Code Online (Sandbox Code Playgroud)
3。
tempFile = open('C:\\Windows\\temp\\tempExports.txt', 'w')
process = subprocess.Popen(['C:\\Program Files\\Microsoft Visual Studio 8\\VC\\bin\\dumpbin', '/EXPORTS', dllFilePath], stdout = tempFile)
process.wait()
tempFile.close()
Run Code Online (Sandbox Code Playgroud)
有没有人对dumpbin /EXPORTS C:\Windows\system32\kernel32.dll > tempfile.txt在Python中正确执行我想做的事情有任何想法?
使用DUMPBIN在C++ .DLL(或IMPLIB .LIB文件)与/输出或/进口我看到的语法中,如以下的输出:
Exports
ordinal name
_CloseConduit@4
_ConduitPort
_GetConduitVersion@4
_GetStatusConduit@8
_GetTimeout@0
_OpenConduit@4
Run Code Online (Sandbox Code Playgroud)
我无法找到@n指定含义的定义.我最后得出结论,它是参数数据的字节数,但是根据一些例子的推断,它让我有点紧张.任何人都可以指向一个参考,或者与任何权威人士说,这里的数字是什么意思?
我们都知道我们可以使用dumpbin for .obj文件来显示所有符号,包括外部符号.
dumpbin /symbols ExternCTest.ob
00F 00000000 UNDEF notype () External | ?foo@@YAHH@Z (int __cdecl foo(int))
Run Code Online (Sandbox Code Playgroud)
但我想知道我怎么能为DLL做这个?我也尝试过dumpbin/exports以及依赖walker,但它没有显示外部符号.
我该怎么办?
谢谢
我刚刚第一次使用DUMPBIN,我在输出文件中反复看到术语HIGHLOW:
BASE RELOCATIONS #7
11000 RVA, E0 SizeOfBlock
...
3B5 HIGHLOW 2001753D ___onexitbegin
3C1 HIGHLOW 2001753D ___onexitbegin
...
Run Code Online (Sandbox Code Playgroud)
我很好奇这个词的意思.我没有在Google或Stackoverflow上找到任何关于它的内容.
我正在尝试为modbusm.dll创建一个包装器C#文件(win-tech.com/html/mbusocx.htm),我正在使用dumpbin输出.
转储文件modbusm.dll
文件类型:DLL
该部分包含modbusm.dll的以下导出
Run Code Online (Sandbox Code Playgroud)00000000 characteristics 41128817 time date stamp Fri Aug 06 00:48:47 2004 0.00 version 1 ordinal base 27 number of functions 27 number of names ordinal hint RVA name 1 0 000085BA _AbortTheCall@4 2 1 00003441 _CloseConnection@4 3 2 000033A7 _ConnectASCII@12 4 3 000033E1 _ConnectDanielsASCII@12 5 4 000033C4 _ConnectDanielsRTU@12 6 5 0000338A _ConnectRTU@12 7 6 00001019 _ConnectTCP2@12 8 7 00001000 _ConnectTCP@8 9 8 0000829A _DialCall@8 10 9 00003376 _EnableConnectionCallback@4 11 A 00003342 _EnableModbusCallback@8 12 B 00008123 _GetCallState@8 …
我使用 dumpbin /symbols 来查看我创建的库。一些功能有民主基金 NoType在输出。这意味着什么?有没有研究dumpbin输出结构的链接?
我在VS中创建了新的Win32项目,并为此目的选择了动态库(*.dll).
我在主文件中定义了一些导出函数:
__declspec(dllexport)
int TestCall(void)
{
int value = 4 / 2;
std::cout << typeid(value).name() << std::endl;
return value;
}
__declspec(dllexport)
void SwapMe(int *first, int *second)
{
int tmp = *first;
*first = *second;
*second = tmp;
}
Run Code Online (Sandbox Code Playgroud)
当我看到dumpin/exports时,我得到了:
ordinal hint RVA name
1 0 00001010 ?SwapMe@@YAXPEAH0@Z
2 1 00001270 ?TestCall@@YAHXZ
Run Code Online (Sandbox Code Playgroud)
我正在调用C#这样的版本:
[DllImport(@"lib1.dll", EntryPoint = "?TestCall@@YAHXZ",
CallingConvention = CallingConvention.Cdecl)]
static extern int TestCall();
Run Code Online (Sandbox Code Playgroud)
这不是使用导出方法的正确形式.我在C++ DLL项目中为导出方法生成这样的名称失败了吗?
当使用dumpbin来查看我的媒体库的详细信息:
dumpbin /headers Test.dll
我看到 {{FullFolder to Test.pdb}} 是 pdb 的完整文件夹。
调试目录
Time Type Size RVA Pointer
-------- ------- -------- -------- --------
95BA9373 cv A1 000199D4 17BD4 Format: RSDS, {4AF64893-BAF4-4FF3-9343-E8D5A55E94FF}, 1, {{FullFolder to Test.pdb}}
00000000 repro 0 00000000 0
Run Code Online (Sandbox Code Playgroud)
有没有办法在 csproj 文件中排除这个?
我的 .csproj 看起来像:
<DebugType>full</DebugType>
<IncludeSource>True</IncludeSource>
<IncludeSymbols>True</IncludeSymbols>
<PdbPath>none</PdbPath>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Run Code Online (Sandbox Code Playgroud)
似乎该PdbPath元素不再以新的(vs2017 多框架) .csproj 格式工作?
我以前没有.dll或.lib文件的经验,我需要在这些文件中看到函数的代码.我不知道要看哪一个,在stackoverflow中搜索引导我到dumpbin,我可以使用dumpbin/EXPORTS来查看标题和函数.但是我怎么能看到实际的代码呢?我可以通过控制台完成,还是必须下载单独的程序?
PS:我使用Visual Studio,这些是C++函数.
任何帮助,将不胜感激.