小编Kbd*_*man的帖子

在这种情况下,为什么编译器使用 32 位寄存器来传递指向 amd64 linux 上的函数的指针

在此处输入图片说明我正在调试一个带有修改过的boringssl 的chrome。它总是有一个SegmentFault。我发现问题是

EC_GROUP_get_curve_name(EC_KEY_get0_group(ec));
Run Code Online (Sandbox Code Playgroud)

反汇编代码:

callq EC_KEY_get0_group
mov %eax,%edi
callq EC_GROUP_get_curve_name
Run Code Online (Sandbox Code Playgroud)

的返回类型EC_KEY_get0_group是一个EC_GROUP*指针,但它是EC_GROUP_get_curve_name由一个 32 位寄存器传递给的。

指针被截断并导致 SegmentFault。为什么编译器会生成这样的代码?是否有任何编译器选项可以避免这种情况?

c ssl assembly x86-64 chromium

1
推荐指数
1
解决办法
89
查看次数

标签 统计

assembly ×1

c ×1

chromium ×1

ssl ×1

x86-64 ×1