gpt4 book ai didi

即使在优化时,我可以强制 gcc/clang 发出函数调用吗?

转载 作者:行者123 更新时间:2023-12-03 17:21:59 26 4
gpt4 key购买 nike

我有一些代码在 ptrace 下运行 x64 程序并操纵它们的代码。为了测试这类事情,我在我的一个测试程序中有一个占位符函数:

uint32_t __attribute__((noinline)) func(void) {
return 0xCCCCCCCC;
}
0xCCCCCCCC然后在运行时用其他一些常量替换。

但是,当我使用 clang 和优化进行编译时,clang 会用常量 0xCCCCCCCC 替换对函数的调用。 (因为功能很简单)。例如,下面是为调用生成的部分代码,用于检查对修改的调用 TestFunc()返回 0xCDCDCDCD ,它应该在修改后:
movl    $3435973836, %edi       ## imm = 0xCCCCCCCC
movl $3435973836, %eax ## imm = 0xCCCCCCCC
leaq 16843009(%rax), %rdx ## [16843009 = 0x01010101]

正如您可能想象的那样,此测试随后失败,因为这两个不匹配的常量值将不匹配!

我可以强制clang(并且希望以同样的方式,gcc ...)生成函数调用吗?

(我不想全局禁用优化 - 我已经有一个可以做到这一点的构建(并且通过该构建,所有测试都通过了)。如果可能的话,我只想做一个现场修复。)

最佳答案

使用属性 optnoneoptimize设置 func 的优化级别至-O0 .

仅限 optnone在我的机器上定义。所以我的代码如下,但你的可能使用标题 __attribute__ ((optimize("0"))) .

#include <stdlib.h>

uint32_t __attribute__ ((optnone)) func(void) {
return 0xCCCCCCCC;
}

int main()
{
return func();
}

In clang, how do you use per-function optimization attributes? .

关于即使在优化时,我可以强制 gcc/clang 发出函数调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34387536/

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