听我瞎扯蛋 发表于 2024-3-15 17:59

问各位大神一个动态库printf函数逆向问题

小弟初学逆向,目前用IDA分析一个嵌入式设备的so库文件,目标是想更改库文件中的logger函数,原函数是logger到某个文件里面的,我现在想改为printf到串口终端
目前这个设备是禁用串口的,在系统内用shell脚本printf或者echo都不能正常输出到串口
但是用printf xxxx>/dev/ttyS0 或者echo xxxx > /dev/ttyS0就可以正常输出到串口,我猜测是不是系统默认的stdout不是ttyS0,但是又不知道怎么修改默认stdout
现在通过IDA逆向修改了so中的logger函数,函数内调用printf同样是无法输出到ttyS0,想问一下各位前辈有没有能提供点思路?

1364847132 发表于 2024-3-15 18:27

本帖最后由 1364847132 于 2024-3-15 18:50 编辑

int file = open("/dev/ttyS0", O_WRONLY);
dup2(file, 1); //1:stdout,重定向stdout到file

或者
freopen("/dev/ttyS0", "w", stdout);

爱飞的猫 发表于 2024-3-15 18:22

本帖最后由 爱飞的猫 于 2024-3-15 18:24 编辑

你可以尝试改成初始化时利用 fopen 打开串口文件,然后把 printf 的实现改成调用 fprintf 打印到这个串口文件句柄

听我瞎扯蛋 发表于 2024-3-18 08:19

1364847132 发表于 2024-3-15 18:27
int file = open("/dev/ttyS0", O_WRONLY);
dup2(file, 1); //1:stdout,重定向stdout到file



是dump出来的固件,并没有相应的sdk,你这个方法只能在有编译环境的情况下使用,目前是需要在编译好的程序内实现这一目标

1364847132 发表于 2024-3-20 17:01

本帖最后由 1364847132 于 2024-3-20 17:07 编辑

听我瞎扯蛋 发表于 2024-3-18 08:19
是dump出来的固件,并没有相应的sdk,你这个方法只能在有编译环境的情况下使用,目前是需要在编译好的程 ...
open和dup2都是系统调用提供的函数,咋不能用了。
去查查SYS_open和SYS_dup2对应的系统调用号是多少不就行了。
页: [1]
查看完整版本: 问各位大神一个动态库printf函数逆向问题