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