IDA反汇编中的.cpp文件是什么
逆向工程
艾达
拆卸
视窗 10
2021-07-06 15:41:12
3个回答
我发表了评论,然后我阅读了 malikcjm 的回答
所以这基本上是malikcjm答案的延伸。
假设你有这样一段代码,将编译好的exe加载到ida中
#include <stdio.h>
void main (void){
printf("%s\n" ,__FILE__);
}
您将获得 cpp 文件参考
这些__FILE__
,__LINE__
等被预先定义在C ++标准以及一些Microsoft特定的预定义的宏中定义的宏
查看PRE_DEFINED_MACROS以了解这些预定义宏的讨论和用法
这些预定义的宏不仅限于调试模式;它们也可以在发布模式下使用
这是在发布模式下使用它们的示例代码
#include <windows.h>
#pragma comment (lib , "test.lib")
#pragma comment (lib , "kernel32.lib")
#pragma comment (lib , "user32.lib")
_declspec (dllexport) int AddNum(int a, int b);
char buff[0x100] = { 0 };
PCHAR timepass(int a, PCHAR b) {
wsprintfA(buff,"%d %s\n%s\t%s\t%s\n", a,b,__FUNCTION__,__FUNCDNAME__,__FUNCSIG__);
OutputDebugStringA(buff);
wsprintfA(buff,"we are done passing time\n");
return buff;
}
int main(void) {
wsprintfA(buff, "3 + 5 = %x\n", AddNum(3, 5));
OutputDebugStringA(buff);
wsprintfA(buff, "%s\n", __FILE__);
OutputDebugStringA(buff);
wsprintfA(buff, "%s\n", __DATE__);
OutputDebugStringA(buff);
wsprintfA(buff, "%d\n", __LINE__);
OutputDebugStringA(buff);
wsprintfA(buff, "%s\n", __func__);
OutputDebugStringA(buff);
OutputDebugStringA(timepass(1337 , "we are now going to pass time"));
return 0;
}
编译并链接到
cl /nologo use%1.cpp /link /ENTRY:main /SUBSYSTEM:windows /RELEASE
在调试器中执行会显示
>cdb -c "g;q" usetest.exe | tail -n 13
DLL_PROCESS_ATTACH Called
3 + 5 = 8
usetest.cpp
Mar 1 2018
20
main
1337 we are now going to pass time
timepass ?timepass@@YAPADHPAD@Z char *__cdecl timepass(int,char *)
we are done passing time
DLL_PROCESS_DETACH Called
quit:
如果 PDB 可用,我们也可以从它们那里获得所谓的泄漏,例如来自 ntdll pdb 的文件路径示例
e:\cvdump>cvdump -sf e:\SYMBOLS\ntdll.pdb\120028FA453F4CD5A6A404EC37396A582\ntdll.pdb >> leaks.txt
e:\cvdump>wc -l leaks.txt
860 leaks.txt
e:\cvdump>grep "daytona" leaks.txt | grep ldrs
** Module: "o:\w7rtm.obj.x86fre\minkernel\ntdll\daytona\objfre\i386\ldrstart.obj"
** Module: "o:\w7rtm.obj.x86fre\minkernel\ntdll\daytona\objfre\i386\ldrsnap.obj"
反汇编中没有 *.cpp 文件。它看起来像自动生成的字符串文件文件路径。它有时用于记录。如果使用了源代码__FILE__
预处理器指令中的某处,则可以生成它。
这只是二进制文件中的一个字符串,出于某种原因,它代表文件名,在本例中是一个 cpp 文件。也许这个二进制文件出于某种原因需要在系统上访问它,或者检查它们是否存在,如果存在(或如果不存在)则执行一些工作。
它们不是隐藏的,不幸的是不可用。
其它你可能感兴趣的问题