将变量/数据类型编译为可执行文件(Ghidra、C、C++、gcc)

Compiling variables/data types into executable (Ghidra, C, C++, gcc)

提问人:Stryker2k2 提问时间:2/25/2021 更新时间:2/25/2021 访问量:343

问:

我目前正在对一个软件示例进行逆向工程,其中原作者在编译时将一系列 unicode 数据类型/变量预定义到示例的 .data 部分。因此,由于它们似乎被编译到可执行文件本身中,因此我找不到编写它们的代码的位置(显然)。

因此,我的问题......原作者如何使用 C/C++ 将这些变量编译到可执行文件的 .data 部分?通过 #include 声明?C/C++ psydo代码会是什么样子?或者是“variable.c”被转换为“variable.o”并作为参数添加到GCC编译器中?

任何想法/建议/理论都是值得赞赏的。

enter image description here

C++ C 变量 Ghidra 进行逆向工程

评论


答:

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::stringstd::string
0赞 Nicol Bolas 2/25/2021
@DeanJohnson:内部分配存储以存储给定的任何字符串。它从不指向字符串文字。std::string
0赞 Dean Johnson 2/25/2021
@NicolBolas 谢谢,改写了我的评论来解决这个问题。文本仍存储在数据段中,但也必须有自己的存储。std::string