[英]C call function type error
我正在嘗試編譯此代碼,該代碼從“ 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類型聲明有錯誤
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
任何幫助表示贊賞
出現此錯誤的原因是因為您沒有鏈接到所需的庫libcfmapi.so
。
這不是您希望在Debian系統中找到的庫,因為它對於您要破解的BT設備是唯一的。
簡而言之-從您的設備中獲取庫,針對從設備中提取的庫交叉編譯到設備體系結構,您應該可以。
基於Ishay Peled答案的更多信息:
readelf -s <pulled library> | grep ATP_CFM_ExtCustomImportEncryptedUserCfgFile
我懷疑問題不在於您調用的函數不存在,而是沒有函數被顯示,它很可能是空的,就像nm結果:
nm:libcfmapi.so:無符號
在不使用管道傳遞給grep的情況下執行命令,我敢打賭,您的輸出是:
readelf -s libcfmapi.so
動態符號信息不可用於顯示符號。
如果有人知道從文件中獲取標頭的方式,我相信您可以找到所需的函數,然后鏈接並運行(我也試圖使用libcfmapi.so,但缺少所需的編程/反轉知識)。
使用庫時,必須:
通過以下方式在鏈接語句中包含該庫
-l cfmapi
在源代碼中包含該庫的頭文件:
#include <cfmapi.h>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.