Equ*_*Dev 1 c debugging assembly symbols ollydbg
编写一个简单的hello_world.c程序,并使用32位MinGW进行编译,
objdump可以使用以下命令显示符号表:
objdump -t hello_world.exe
Run Code Online (Sandbox Code Playgroud)
然后符号表有一个条目为_main:
...
[ 32](sec 1)(fl 0x00)(ty 20)(scl 2) (nx 1) 0x00000460 _main
...
Run Code Online (Sandbox Code Playgroud)
但是,当hello_world.exe在x64dbg调试器中加载文件时,
_main不会显示该符号,正如hello_world选择模块时从下面的符号列表中可以看到的那样。
这很烦人,因为我想在 中的用户代码开始处创建一个断点hello_world,并且使用符号跳转到开始位置会非常方便。
关于如何获取_main符号列表中包含的符号有什么想法吗?
虽然 PE 支持存储调试信息,但符号表主要是 ELF 概念。
如果您查看 PE 部分(使用objdump -h),您将看到许多 PE 目录中未引用的额外部分。
binutils 使用它们来提取DWARF 信息并向您显示符号表等内容。
x64dbg是一个纯Windows/PE工具,不理解DWARF。
但是,它会显示 PE 入口点的地址(尽管很少是“ main”本身的地址),并会自动在此处放置一个断点。
入口点显示在所检查的二进制文件的导出符号下方。
此外,x64dbg 将在“ntdll”上中断,允许您使用 CTRL+F9 来到达入口点(注意 TLS 初始化回调)。
为此,main您可以逐步执行代码,直到找到对 部分中的地址的调用.text,或者只是找到一个调用,然后调用两次cexit和ExitProcess。
_main另外,给定使用isobjdumpt -t的 VA检索到的偏移量_main为BASE ADDRESS+ .text RVA+ __main OFFSET。
就我而言,这是4010460h