gpt4 book ai didi

c - CALL 指令如何解析为十六进制?

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:41 24 4
gpt4 key购买 nike

我写了一个简单的C代码是这样的:

int add2(int a) {
return a+2;
}

int main()
{
int a=0;
a = add2(a);
printf("%d\n", a);
}

当我使用 objdump 时,我发现了这个:

  400558:       e8 d8 ff ff ff          callq  400535 <add2>

我想知道十六进制代码 e8 d8 ff ff ff 之间的关系和 callq 400535 <add2> .我搜索了一下,发现callq的十六进制代码是e8 ,但是 d8 ff ff ff 呢? ?跟callq调用的地址有关系吗?非常感谢。

最佳答案

如果你看this instruction reference ,你会看到 call 的操作码 E8 有两个可能的操作数,rel16rel32,这意味着相对于下一条指令指针的 16 位或 32 位地址位移。 d8 ff ff ff 解释为存储在 little-endian 中的 32 位二进制补码值时,相对位移 0xFFFFFFD8,即 -40,所以 call 指令正在调用 call 指令本身结束前 -40 字节开始的代码作为函数。

关于c - CALL 指令如何解析为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com