使用GCC编译原始汇编代码注入代码
我想将一些使用GCC编译原始汇编代码注入代码,c,gcc,assembly,compiler-optimization,powerpc,C,Gcc,Assembly,Compiler Optimization,Powerpc,我想将一些C或C++代码直接编译到PowerPC程序集,而不需要任何生成的辅助函数、标准库、ELF头等等。这是类似的,但我仍然有一些麻烦 假设我想将以下代码直接编译到原始程序集,只生成一个函数并内联所有内容: auto get_address() { const auto value = *(int *) 0x1234; // Read the value from address 0x1234 return reinterpret_cast<int *>(value
C
或C++
代码直接编译到PowerPC
程序集,而不需要任何生成的辅助函数、标准库、ELF
头等等。这是类似的,但我仍然有一些麻烦
假设我想将以下代码直接编译到原始程序集,只生成一个函数并内联所有内容:
auto get_address() {
const auto value = *(int *) 0x1234; // Read the value from address 0x1234
return reinterpret_cast<int *>(value); // Return it as address
}
void perform_write() {
const auto address = get_address(); // Get the address using the helper function
*address = 1; // Assign a value to the address
}
现在,如果我使用编译器资源管理器网站:
这有以下问题:
get\u address()
内联在perform\u write()
中,但它还是会生成。如何获取GCC
以从输出中省略冗余的get_address()
?我能否以某种方式将perform_write()
标记为入口点以完成此任务?我尝试使用属性\uuuu attribute\uuuuu((始终\u内联))
但它什么也没做(可能是因为默认情况下,GCC
已经内联了代码,但没有删除未使用的函数)%
符号会很好,即使这对于进一步编译机器代码并不重要。Intel
复选框被禁用,%
通常是AT&T
语法我希望最好使用编译器标志或在必要时修改源代码来完成这些事情。我希望避免使用编程语言对输出进行后处理,以获得所需的输出,因为这当然有效,但可能不够健壮。1。标记您的
get\u地址
函数静态
。2.英特尔vs at&t仅适用于x86。您当然可以使用-mno regnames
,但由于您明确添加了-mregnames
,我想您不希望这样。如果您不标记函数static
,则它具有全局范围。编译器必须生成它,因为其他单元可能会调用它。@Jester:是的,这就成功了,谢谢:)1。标记您的get\u地址
函数静态
。2.英特尔vs at&t仅适用于x86。您当然可以使用-mno regnames
,但由于您明确添加了-mregnames
,我想您不希望这样。如果您不标记函数static
,则它具有全局范围。编译器必须生成它,因为其他单元可能会调用它。@Jester:是的,这就成功了,谢谢:)
li r9,4660
li r10,1
lwz r9,0(r9)
stw r10,0(r9)
blr