【发布时间】:2020-02-20 21:21:44
【问题描述】:
有没有办法避免编译后的代码使用 .data 段?是否可以编写 C 代码并使用编译器选项强制所有内容都在 .text 中? 我问的原因是因为我想将另一个程序的汇编代码放入堆栈并从那里运行代码。所以如果这个程序正在使用数据段,它将无法工作。
【问题讨论】:
-
如果你没有全局变量,并且没有使用有全局变量的库,那么数据段中就没有任何东西。 (请注意,这过于严格;声明为 const 的全局变量和没有初始化器的全局变量很可能在其他段中。)
-
您为什么认为不使用
.data将允许从堆栈运行代码?为什么你认为使用.data会阻止它? -
知道最初的问题是什么会很有趣。你在做什么似乎是一个黑客。我有一种感觉,如果我们知道最初的问题是什么,我们可能会提供一个不涉及将汇编程序加载到堆栈中的解决方案。你想要完成什么,为什么?
-
程序 A 的字节码应该从程序 B 加载。程序 B 加密/解密程序 A 的代码并从堆栈中运行它。我不想用汇编程序编写整个程序 A,而是用 C 编写。因此这里的问题。
-
为什么要堆叠?在链接描述文件中定义一些可执行部分并使用
__attribute__((section("name"))加载代码