问题描述
A.mm
- (void)Foo {
const unsigned long long dataLen = 0; // In a particular case dataLen is 0
NSMutableData* data = [NSMutableData dataWithLength:dataLen];
b->TestGetData(data.mutableBytes,data.length);
}
B.cpp
void B::TestGetData(void* data,unsigned long long dataLength) {
memset(data,(size_t)dataLength);
std::string reqBody = ""; // in a particular case reqBody is empty
memcpy(data,reqBody.c_str(),dataLength);
printf("[data = %s]",(char*)data);
}
当我使用 AddressSanitizer 构建应用程序时,程序停止
SUMMARY: AddressSanitizer: heap-buffer-overflow (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0x267dd) in printf_common(void*,char const*,__va_list_tag*)
{
"access_size" : 2,"access_type" : 0,"address" : 105690556485681,"description" : "heap-buffer-overflow","instrumentation_class" : "AddressSanitizer","pc" : 4539582430,"stop_type" : "fatal_error"
}
但是在没有 AddressSanitizer 的情况下构建应用程序时没有问题
同样在 AddressSanitizer 的情况下,我注意到 data
的内存地址的字节是 BE 00 00 00 ...
但没有 AddressSanitizer 的字节是 00 00 00 ...
我无法理解:
- 字节
\XBE
来自哪里? - 为什么 AddressSanitizer 构建中存在问题?
- 为什么它会报告heap-buffer-overflow?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)