在 GDB 脚本的帮助下:
file ./program
b *0x12345
run
while 1
x/i $pc
ni
end
quit
我得到了一个混淆程序的跟踪协议:
...
0x484e0: bx lr
?? ()
0x43d88: b 0x43db8
?? ()
0x43db8: ldr r3, [r11, #-16]
?? ()
0x43dbc: mov r0, r3
?? ()
0x43dc0: sub sp, r11, #12
?? ()
0x43dc4: pop {r4, r5, r11, pc}
?? ()
0x3fb94: ldr r3, [r11, #-8]
?? ()
0x3fb98: mov r0, r3
?? ()
0x3fb9c: sub sp, r11, #4
?? ()
0x3fba0: pop {r11, pc}
?? ()
0x3da68: ldr r3, [r11, #-8]
...
Kris Kaspersky 写道,通过编译器优化器传递跟踪器协议是一个好主意,以便更好地理解这个程序。但是我不知道应该使用什么编译器以及应该以什么方式使用。
PS我应该怎么做才能摆脱不必要的行:“??()”?我应该怎么做才能将 GDB 重定向到文件中?
编辑:
书籍:Kris Kaspersky “Искусство дизассемблирования”,俄语书籍(翻译 - “拆卸的艺术”)。第 39 章,第 822 页(在列表下)。我不知道是否存在英语类似物。