如何帮助 GDB 反汇编器视图在说明上正确同步?

How do I help GDB disassembler view to synchronize correctly on the instructions?

提问人:user7610 提问时间:5/22/2023 更新时间:5/22/2023 访问量:43

问:

我正在拆解以下 Python 程序的内存。反汇编应该以 instruction 或 开头,但 GDB(通过 clion 或 qt develop 运行)看不到它,而是显示某种指令,该指令是通过用它解码前一个字节而产生的,即 .int 30xccadd0x00 0xcc

我知道 x86 程序集不是自同步的(如果“objdump -d --start-address”从 x86 指令的中间开始打印会发生什么?

如何帮助 GDB 正确同步?

qt creator screenshot

import ctypes
import mmap

buf = mmap.mmap(-1, mmap.PAGESIZE, prot=mmap.PROT_READ | mmap.PROT_WRITE | mmap.PROT_EXEC)
buf.write(
    b'\xcc'  # int 3

    b'\x8b\xc7'  # mov eax, edi
    b'\x83\xc0\x01'  # add eax, 1
    b'\xc3'  # ret
)

f_type = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)
f_pointer = ctypes.c_void_p.from_buffer(buf)
f = f_type(ctypes.addressof(f_pointer))

result = f(42)
print(f"{result=}")

del f_pointer
buf.close()
GDB 反汇编 机器代码

评论

0赞 user7610 5/22/2023
看起来qt开发问题。看起来我可以右键单击,选择“在地址打开反汇编程序...”并输入我自己的起始地址。有没有办法让IDE自动找出正确的地址?我可以在似乎没有 Open Disassembler at Address 命令的 Clion 中执行此操作吗?37-interpreter-exec console "disassemble /rs 0x7ff5ddc4ffed,0x7ff5ddc50065"
0赞 Erik Eidt 5/22/2023
奇怪的是,该函数的地址很奇怪;我本来以为它会0x7ff5ddc500000 - 映射的整页边界。你能尝试在之前和之后同时做并分享这些结果吗?同时分享 & 的价值。同时共享 的返回值。buf.tell()buf.writef_pointerfbuf.write
0赞 user7610 5/22/2023
(指令的)地址确实是。只是 IP 在创建 coredump 时已经移动到了下一条指令上(由于 SIGTRAP 导致了 )。int 30x7ff5ddc50000int 3

答: 暂无答案