我试图编译这个从" libcfmapi.so调用func的代码"解密" cfg"文件
#include <stdlib.h>
#include <stdio.h>
int restorebackup(const char *tmp_cfg_name,const char *xml_cfg_name);
int ATP_CFM_ExtCustomImportEncryptedUserCfgFile(const char *tmp_cfg_name);
int main(int argc, char **argv)
{
int ret;
if(argc < 3)
{
printf("specify temp config file name.\n");
exit(1);
}
ret=restorebackup(argv[1],argv[2]);
return ret;
}
int restorebackup(const char *tmp_cfg_name,const char *xml_cfg_name)
{
int ret=0;
//ret = ATP_CFM_ExtDigVerifyFile(tmp_cfg_name,tmp_cfg_name);
if(ret != 0)
{
printf("Verify File failed.\n");
return ret;
}
ret = ATP_CFM_ExtCustomImportEncryptedUserCfgFile(tmp_cfg_name);
return ret;
}
但是有关func type declare的错误
root@kali:~/debian-qemu# gcc h.c -o demo
/tmp/ccVbt5NT.o: In function `restorebackup':
h.c:(.text+0x8c): undefined reference to `ATP_CFM_ExtCustomImportEncryptedUserCfgFile'
collect2: error: ld returned 1 exit status
任何帮助表示赞赏
答案 0 :(得分:0)
您收到此错误的原因是您没有链接到所需的库libcfmapi.so
。
这不是您期望在Debian系统中找到的库,因为它是您尝试入侵的BT设备所独有的。
简而言之 - 从您的设备获取lib,针对从设备中提取的lib交叉编译到设备架构,您应该没问题。
答案 1 :(得分:0)
基于Ishay Peled回答的更多信息:
readelf -s <pulled library> | grep ATP_CFM_ExtCustomImportEncryptedUserCfgFile
我怀疑问题不在于您调用的功能不存在,而是没有显示任何功能,它很可能是空的,就像nm结果一样:
nm:libcfmapi.so:无符号
执行命令而没有管道到grep,我的赌注是你的输出是:
readelf -s libcfmapi.so
动态符号信息不可用于显示符号。
如果有人知道从文件中获取标题的方式,我相信你可以找到你需要的功能然后链接和运行(我也尝试使用libcfmapi.so,但缺乏编程/需要的编程/反向知识)
答案 2 :(得分:-2)
使用库时,必须:
通过
在链接语句中包含该库 -l cfmapi
在源代码中包含该库的头文件:
#include <cfmapi.h>