提问人:Stryker2k2 提问时间:2/25/2021 更新时间:2/25/2021 访问量:343
将变量/数据类型编译为可执行文件(Ghidra、C、C++、gcc)
Compiling variables/data types into executable (Ghidra, C, C++, gcc)
问:
我目前正在对一个软件示例进行逆向工程,其中原作者在编译时将一系列 unicode 数据类型/变量预定义到示例的 .data 部分。因此,由于它们似乎被编译到可执行文件本身中,因此我找不到编写它们的代码的位置(显然)。
因此,我的问题......原作者如何使用 C/C++ 将这些变量编译到可执行文件的 .data 部分?通过 #include 声明?C/C++ psydo代码会是什么样子?或者是“variable.c”被转换为“variable.o”并作为参数添加到GCC编译器中?
任何想法/建议/理论都是值得赞赏的。
答:
1赞
Dean Johnson
2/25/2021
#1
我很确定这就是(通常)字符串文字发生的情况:
int main() {
std::string s = u"Services";
return 0;
}
看这个。
评论
0赞
Stryker2k2
2/25/2021
啊,好吧,我想你刚刚解冻了我的大脑冻结。因此,像“std::string”或“const char[64]”这样的内容都会被事先编译到可执行文件中;与可以动态更改的变量不同。
0赞
Dean Johnson
2/25/2021
字符数据被编译到 exe 中,是的。由于是可变的,因此它可能最终会复制并将该数据存储在堆上,但分配给的字符串文字本身的数据通常会存储在数据段中。std::string
std::string
0赞
Nicol Bolas
2/25/2021
@DeanJohnson:内部分配存储以存储给定的任何字符串。它从不指向字符串文字。std::string
0赞
Dean Johnson
2/25/2021
@NicolBolas 谢谢,改写了我的评论来解决这个问题。文本仍存储在数据段中,但也必须有自己的存储。std::string
评论