我一直在寻找这个问题,但似乎无法找到它。如果我在GDB反汇编代码,如何将0xfffffff4转换为-0xc(我在网上找到这些值)转换内存地址
我正试图实现它在Perl中的工作方式。我是用十六进制,但我不知道在做什么IM:
print hex(shift);
我一直在寻找这个问题,但似乎无法找到它。如果我在GDB反汇编代码,如何将0xfffffff4转换为-0xc(我在网上找到这些值)转换内存地址
我正试图实现它在Perl中的工作方式。我是用十六进制,但我不知道在做什么IM:
print hex(shift);
它补http://en.wikipedia.org/wiki/Two%27s_complement
所以,你要做的就是反转每一位,然后加1
例如0xffffff04将成为0x000000fb + 1 = 0x000000fc
编辑:和改回来,你做同样的事情:使0x000000fc将成为0xffffff03 + 1 = 0xffffff04
在32位寄存器或存储器访问中,0xfffffff4
是-0xc
(或-12
)—假设现代CPU架构,所有这些都使用二进制补码。
它被称为二进制补码:http://en.wikipedia.org/wiki/Two%27s_complement – 2012-04-11 23:34:37