【发布时间】:2012-03-05 13:14:32
【问题描述】:
我编写了一个简单的程序来使用 ptrace 获取进程的指令。你可以在这里找到代码
我在 Ubuntu 64 位下编译并运行它。
我得到的是这样的:
EIP: 7f7e5edf5c75 Instruction executed: 8824848948f0394c
EIP: 7f7e5edf5c78 Instruction executed: 8824848948
EIP: 7f7e5edf5c80 Instruction executed: 84f6000000da840f
EIP: 7f7e5edf5c86 Instruction executed: 2000000b42484f6
...
...
EIP: 400dab Instruction executed: e8c78948ef458d48
EIP: 400daf Instruction executed: fffffe29e8c78948
EIP: 400db2 Instruction executed: 458d48fffffe29e8
EIP: 400be0 Instruction executed: d680020148225ff
...
...
EIP: 7f7e5ee012f0 Instruction executed: 2404894838ec8348
EIP: 7f7e5ee012f4 Instruction executed: 244c894824048948
...
...
我用gdb的时候只能看到EIP下的那些指令:400dab... 7f下的找不到...所以我猜是错...
(gdb) x/20xg 0x0000000000400dab
0x400dab <main+135>: 0xe8c78948ef458d48 0xee458d48fffffe29
0x400dbb <main+151>: 0xfffffe4de8c78948 0x10c0834880458b48
0x400dcb <main+167>: 0x48ee558d48088b48 0x8948ce8948c0458d
谁能解释为什么我的代码是错误的以及如何只打印正确的 EIP 和指令?
【问题讨论】:
标签: c linux ubuntu 64-bit ptrace