簡體   English   中英

C調用函數類型錯誤

[英]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,但缺少所需的編程/反轉知識)。

使用庫時,必須:

  1. 通過以下方式在鏈接語句中包含該庫

    -l cfmapi

  2. 在源代碼中包含該庫的頭文件:

    #include <cfmapi.h>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM