我一直在寻找这个问题,但似乎无法找到它。如果我在GDB反汇编代码中,如何将0xfffffff4之类的内容转换为-0xc(我在网上找到了值)
我正在尝试实现它在Perl中的完成方式。我正在使用十六进制,但我不知道我在做什么:
print hex(shift);
答案 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架构,所有这些都使用二进制补码。