如何在exe中获取特定函数的偏移量?

逆向工程 调试 x64dbg 可执行 x86-64
2021-06-14 18:27:57

假设我有自编译的 exe 文件(又名便携式可执行文件)、它的源代码 (c/c++) 和生成的 pdb 文件。如果我想在调试器(x64dbg,无论如何)中获得其函数(非 winapi 函数)的偏移量以在其上设置断点怎么办?我想知道/了解现有的反向技术来做到这一点。

1个回答

如果可执行文件有 pdb,x64dbg 可以加载 pdb 并列出所有函数名称

查看->模块->下载这个模块的符号 在此处输入图片说明 也x64dbg可以使用源文件(ctrl+shift+s) 在此处输入图片说明

只是为了完成windbg的使用

:\>cdb -c ".lines;bp `winchk.cpp:17`" winchk.exe

Microsoft (R) Windows Debugger Version 10.0.17763.132 AMD64


CommandLine: winchk.exe


ntdll!LdrpDoDebuggerBreak+0x30:
00007ffa`055f108c cc              int     3
0:000> cdb: Reading initial command '.lines;bp `winchk.cpp:17`'
Line number information will be loaded
0:000> bl
 0 e 00007ff7`ad0f1090     0001 (0001)  0:**** winchk!main
0:000> g
Breakpoint 0 hit
winchk!main:
00007ff7`ad0f1090 4883ec38        sub     rsp,38h
0:000>

您可以使用windbg安装文件夹中的dbh.exe进行rebase并获取确切地址

winchk [1000000]: x *

 index            address     name
     1            1001090 :   main
     3            1001060 :   atest
     5            1001000 :   ctest
     6            1001030 :   btest

winchk [1000000]: base 0x400000


winchk [400000]: x *

 index            address     name
     1             401090 :   main
     3             401060 :   atest
     5             401000 :   ctest
     6             401030 :   btest

winchk [400000]: