Nat*_*ate 12 xcode gdb objective-c disassembly
我在看一些反汇编代码,看到喜欢的东西0x01c8f09b <+0015> mov 0x8(%edx),%edi,我想知道什么的值%edx或者%edi是.
有没有办法打印%edx或其他汇编变量的值?有没有办法在%edx指向的内存地址处打印值(我假设edx是一个寄存器,其中包含一个指向...的东西).
例如,您可以通过po在控制台中键入来打印对象,那么是否有用于在程序集中打印寄存器/变量的命令或语法?
背景:
我正在EXC_BAD_ACCESS上线,我想调试发生了什么.我知道这个错误与内存管理有关,我正在考虑找出可能丢失的地方/太多的保留/释放/自动释放调用.
附加信息:
这是在IOS上,我的应用程序在iPhone模拟器中运行.
dus*_*uff 16
您可以使用以下方式打印寄存器(例如eax):
print $eax
Run Code Online (Sandbox Code Playgroud)
或者简称:
p $eax
Run Code Online (Sandbox Code Playgroud)
要将其打印为十六进制:
p/x $eax
Run Code Online (Sandbox Code Playgroud)
要显示寄存器指向的值:
x $eax
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看gdb帮助:
help print
help x
Run Code Online (Sandbox Code Playgroud)
G H*_*ley 11
取决于您使用的Xcode编译器/调试器.对于gcc/gdb来说
info registers
Run Code Online (Sandbox Code Playgroud)
但对于clang/lldb来说
register read
Run Code Online (Sandbox Code Playgroud)
(gdb) info reg
eax 0xe 14
ecx 0x2844e0 2639072
edx 0x285360 2642784
ebx 0x283ff4 2637812
esp 0xbffff350 0xbffff350
ebp 0xbffff368 0xbffff368
esi 0x0 0
edi 0x0 0
eip 0x80483f9 0x80483f9 <main+21>
eflags 0x246 [ PF ZF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
Run Code Online (Sandbox Code Playgroud)
从使用gdb调试:
您可以将表达式中的机器寄存器内容称为名称以"$"开头的变量.每台机器的寄存器名称不同; 使用信息寄存器查看您机器上使用的名称.
Run Code Online (Sandbox Code Playgroud)info registers打印除浮点寄存器之外的所有寄存器的名称和值(在选定的堆栈帧中).
Run Code Online (Sandbox Code Playgroud)info all-registers打印所有寄存器的名称和值,包括浮点寄存器.
Run Code Online (Sandbox Code Playgroud)info registers regname ...打印每个指定寄存器regname的相对值.regname可以是您正在使用的机器上有效的任何注册名称,包含或不包含初始的"$".
| 归档时间: |
|
| 查看次数: |
8524 次 |
| 最近记录: |