如何解决为什么应用程序在地址清理程序构建中停止?
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 举报,一经查实,本站将立刻删除。