转换内存地址

时间:2012-04-11 23:32:02

标签: assembly

我一直在寻找这个问题,但似乎无法找到它。如果我在GDB反汇编代码中,如何将0xfffffff4之类的内容转换为-0xc(我在网上找到了值)

我正在尝试实现它在Perl中的完成方式。我正在使用十六进制,但我不知道我在做什么:

print hex(shift);

2 个答案:

答案 0 :(得分:1)

这是两个补码http://en.wikipedia.org/wiki/Two%27s_complement

所以,你要做的是反转每一位,然后加1。

例如,0xffffff04将变为0x000000fb + 1 = 0x000000fc

编辑:并且要改回来,你做同样的事情:所以0x000000fc会变成0xffffff03 + 1 = 0xffffff04

答案 1 :(得分:1)

在32位寄存器或内存访问中,0xfffffff4 -0xc(或-12) - 假设采用现代CPU架构,所有这些都使用二进制补码。