我无法找到这个问题的简单答案。我发现IDC文档令人困惑。我知道我可以调用GetRegValue,它会返回一些我甚至不理解的胡言乱语。例如:
36739244. 23098ACh 214114254o 000000000000000000000000000000000000010001100001001100010101100b
第一个是?!第二个是存储在寄存器中的地址,但为什么在末尾出现h?!第三个不知道是什么。第4个是二进制地址(哇,谢谢(。
好吧,让我们看看那个地址是什么。这是有用户界面的。
Stack[00000184]:023098AC db 8
Stack[00000184]:023098AD db 0D9h
Stack[00000184]:023098AE db 30h ; 0
Stack[00000184]:023098AF db 2
Stack[00000184]:023098B0 db 33h ; 3
Stack[00000184]:023098B1 db 4Dh ; M
Stack[00000184]:023098B2 db 0C9h
Stack[00000184]:023098B3 db 6Ch ; l
Stack[00000184]:023098B4 db 0C4h
Stack[00000184]:023098B5 db 98h
Stack[00000184]:023098B6 db 30h ; 0
同样,h被附加到每个字节。我不明白这是什么意思。那么,为什么要在某些字节前面加0呢?C4就是C4,0是什么意思。
这就是语法怪癖。有一个指针存储在那个地址。我希望能够方便地访问它,而不必复制粘贴字节和删除尾部的h。
最后,我希望能够查看内存中任何地址的值,类似于在GDB中调用x/16bx。或者打印一个地址或立即值,类似于p在GDB中的工作方式。
非常感谢您的帮助。
首先,正如Peter所说,语法部分是我的错误,在很大程度上与IDA无关。
其次,函数read_dbg_byte、read_dbg_word等(以及相应的get_wide_byte等(可以返回地址处的值。
返回值是使用不同符号编写的相同值:分别为十进制、十六进制、八进制和二进制。
最后,您可以使用以下内容来取消引用指针:
read_dbg_dword(read_dbg_dword(0x023098AC))