首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )

【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )

作者头像
韩曙亮
发布2023-03-29 20:33:00
发布2023-03-29 20:33:00
2.7K0
举报

文章目录

一、报错信息


在 Visual Studio 2019 中编译 Android NDK , 构建方式参考 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 ) 博客 ;

报错信息如下 :

命令行报错信息 :

代码语言:javascript
复制
已启动生成…
1>------ 已启动生成: 项目: magic, 配置: Debug Win32 ------
1>[x86] Install        : libbridge.so => ../Debug/x86/libbridge.so
1>[x86] Install        : cmd => ../Debug/x86/cmd
1>[x86] Compile++      : native <= native.cpp
1>./native/native.cpp(428,14): warning G0C39A92D: 'SearchCode' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char>') which is incompatible with C [-Wreturn-type-c-linkage]
1>        std::string SearchCode(unsigned char* data,unsigned size){
1>                    ^
1>./native/native.cpp(442,15): error GEF7559A7: no matching function for call to 'search_string'
1>                                strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(),
1>                                          ^~~~~~~~~~~~~
1>./native/native.cpp:40:13: note: candidate function not viable: no known conversion from 'unsigned char *' to 'const char *' for 4th argument
1>std::string search_string(const char* module, unsigned begin, unsigned end, const char* data, size_t size) {
1>            ^
1>1 warning and 1 error generated.
1>make: *** [obj/local/x86/objs/native/native/native.o] Error 1
1>D:\001_Develop\017_Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets(46,5): error MSB3073: 命令“"D:\001_Develop\001_SDK\Sdk\ndk\android-ndk-r14b\build\ndk-build.cmd" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk ”已退出,代码为 2。
1>已完成生成项目“magic.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

Visual Studio 中的报错信息 :

二、解决方案


search_string 函数定义如下 :

代码语言:javascript
复制
std::string search_string(const char* module, unsigned begin, unsigned end, 
						  const char* data, size_t size) {
	...
}

上述函数第

4

个参数是 const char* data , 类型是 const char* ;

函数调用时 , 在 const char* data 参数位置 , 传入了 unsigned char* 类型的数据 ;

代码语言:javascript
复制
	std::string SearchCode(unsigned char* data,unsigned size){
		std::string strOut;
		
		strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(),
					data, size);

		return strOut;
	}

使用 reinterpret_cast<type-id> (expression) 进行强转 , 将 unsigned char* 类型的数据 强制转换为 const char* 类型 ;

修改后 :

代码语言:javascript
复制
	std::string SearchCode(unsigned char* data,unsigned size){
		std::string strOut;
		
		strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(),
					reinterpret_cast<const char*>(data), size);

		return strOut;
	}

重新编译项目 :

代码语言:javascript
复制
已启动生成…
1>------ 已启动生成: 项目: magic, 配置: Debug Win32 ------
1>[x86] Install        : libbridge.so => ../Debug/x86/libbridge.so
1>[x86] Install        : cmd => ../Debug/x86/cmd
1>[x86] Compile++      : native <= native.cpp
1>./native/native.cpp(428,14): warning G0C39A92D: 'SearchCode' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char>') which is incompatible with C [-Wreturn-type-c-linkage]
1>        std::string SearchCode(unsigned char* data,unsigned size){
1>                    ^
1>1 warning generated.
1>[x86] SharedLibrary  : libnative.so
1>[x86] Install        : libnative.so => ../Debug/x86/libnative.so
1>[x86] Install        : tool => ../Debug/x86/tool
1>已完成生成项目“magic.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、报错信息
  • 二、解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档