gpt4 book ai didi

c - 获取C/C++指令的地址

转载 作者:太空狗 更新时间:2023-10-29 17:11:19 27 4
gpt4 key购买 nike

有什么方法可以获取指令的地址?我曾尝试使用标记指令并获取标签的地址,但似乎它只适用于带有 && 运算符的 GCC 编译器。 (引用:this article)如果是其他编译器呢?

对这个问题有什么想法吗?

最佳答案

我不确定 C 或 C++ 语言标准是否谈及指令;你可以想象运行一个编译为由一大群人类奴隶执行的 C 程序(但这是不道德的,即使符合标准)。你可以自己用铅笔和纸运行一个简单的小程序,你可以使用 C 解释器等等......等等......

优化的 C 或 C++ 编译器还会将一些 C 语句翻译成位于不同位置的多条机器指令(特别是,编译器执行内联或克隆函数甚至基本 block ,即使没有任何 inline 关键字在源代码中)。

在大多数系统上,您可能会编写(例如在汇编中)一个例程,该例程作为指针值返回其返回地址(即调用者的地址)。

使用 GCC(和兼容的编译器,也许是 Clang/LLVM),你可以使用 __builtin_return_address和相关的内置函数。

Linux 上的 Gnu Libc 为您提供 backtrace (但当我尝试时,我对此感到失望)。

请注意,使用 -fno-frame-pointer 编译时,这些技巧可能不起作用

您也可以考虑自定义 GCC,例如使用插件或 MELT扩展(MELT 是一种领域特定语言,作为 GCC 的 GPLv3 插件实现,比使用 C 编码的插件更容易扩展 GCC)。您定制的 GCC 可能会在适当的位置插入对检测函数的调用。

关于c - 获取C/C++指令的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530613/

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