basic_string
类。 现在,我想在结构中定义一个
std::string
(而不是指向它的指针)。现在有什么方法可以自动执行此操作,还是我仍然需要手动定义一个basic_string
结构并从那里开始?当前是否有这样的方式将类和结构关联在一起(当前,我认为类仅充当名称空间?我也尝试仅在结构中添加类型为
basic_string
的字段,但是它抱怨basic_string
只是一个占位符结构。尚未测试ghidra如何处理
std::string
局部变量。编辑:我上面描述的示例代码:
#include <string>
#include <iostream>
struct Human {
int age;
bool is_male;
std::string name;
public:
Human(int age, bool is_male, const std::string &name) : age(age), is_male(is_male),
name(name) { }
void say_hello() {
std::cout << "Hello, I am a " << (is_male ? "male " : "female ") << age <<
"-year old named " << name << "!" << std::endl;
}
};
int main() {
Human *human = new Human(17, true, "Adam");
human->say_hello();
}
将其放入ghidra,然后自动填充struct字段时,它将识别
age
和is_male
字段,但不能识别name
字段,因为这是一个不透明的std::string
对象。至此,当我反转另一个(更大)二进制文件时,我只是手动创建了一个新结构:
struct basic_string {
char *ptr;
size_t len;
char buff[0x10]
};
ghidra是否有可以自动执行此操作的功能?我还想知道,如果我始终假设上述结构会存在任何可移植性问题吗?
#1 楼
编辑:我读错了问题。我提供的解决方案仅显示如何手动添加结构。在Ghidra中似乎没有一种通过文本blob导入结构的方法。是的。
要在Ghidra中添加结构,您必须转到数据类型管理器-对我来说,这是最左边的垂直窗格中的第三帧。
评论
嗯,是的,我想这就是我想的...您认为Ghidra将来会为c ++结构实现类似的东西吗?
–theKidOfArcrania
19 Mar 10 '19 at 21:46
评论
不清楚您的问题,您介意粘贴示例代码吗?添加了示例代码
无法添加评论,但这是指向GitHub Issue
的链接