是否可以使用radare2 c \ c ++ API(libr)做到这一点?如果是,怎么办?
#1 楼
r2piperadar2的最佳编程接口称为r2pipe。
引用该项目的Github页面:
r2pipe API是基于后面的单个r2原语
r_core_cmd_str()
,它是一个接受字符串参数的函数,该函数描述要运行的r2命令并返回带有结果的字符串。r2pipe支持许多编程语言,包括Python,NodeJS,Rust,C和其他语言。
编写程序
要使用r2pipe,您首先应确保自己安装了radare2。始终建议使用git中的最新版本。
按以下步骤安装或更新radare2:
$ git clone https://github.com/radare/radare2.git # clone radare2 if you didn't do it yet for some reason.
$ cd radare2
$ ./sys/install.sh
现在,radare2是安装和更新后,让我们开始编写C程序以列出二进制文件的所有功能。正如您在问题中提到的那样,使用radare2打开二进制文件,执行
aaa
分析二进制文件(实际上是r2 -A binary_name
),然后执行afl
列出所有功能应该等效。首先,我们应该定义一个接受r2实例和命令的函数。此函数将执行命令,打印结果并释放结果字符串。
#include <r_socket.h>
static void r2cmd(R2Pipe *r2, const char *cmd) {
char *msg = r2p_cmd (r2, cmd);
if (msg) {
printf ("%s\n", msg);
free (msg);
}
}
之后,编写
main()
函数应该很直观:int main() {
R2Pipe *r2 = r2p_open ("r2 -q0 /bin/echo");
if (r2) {
r2cmd (r2, "aaa");
r2cmd (r2, "afl");
r2p_close (r2);
return 0;
}
return 1;
}
我们使用要检查的程序定义r2的实例,然后使用刚创建的函数通过radare2的界面执行命令。首先,我们使用
aaa
分析程序,然后使用afl
打印函数。编译
要使用
gcc
编译程序,应执行以下命令: gcc list_functions.c -o list_functions $(pkg-config --cflags r_socket --libs r_socket)
参考文献
r2pipe项目页面
r2pipe C绑定
评论
在Windows程序包中似乎总是缺少lib文件,这里有一个小测试文件显示了如何使用api,但我无法构建它,因为r2程序包中没有任何lrbr.so或libr.a文件github。 com / radare / radare2-bindings / tree / master / c(如果您将ln6中的代码粘贴到“ r2 \ include \ libr”中的文本文件中并使用mingw gcc -I)。 foo.c然后mingw ld抛出未引用的r_bin_new()错误,因为它找不到lib文件,看看是否可以在某些操作系统中获取它们我实际上在Linux下遇到了相同的问题。我在/ usr / lib下有所有的rade库文件。但是,它们是符号链接,并且链接到的文件不存在。