gpt4 book ai didi

c - Wireshark 插件导致 'heap corruption'

转载 作者:太空宇宙 更新时间:2023-11-04 03:45:11 25 4
gpt4 key购买 nike

我正在编写一个 wireshark 解析器并遇到奇怪的内存管理问题。我有以下功能:

guint8* foo_hex2bytes(guchar *str, guint len){
...
//allocate memory for the result and start converting
res = (guint8*)wmem_alloc(scope, sizeof(guint8)*((len>>1)));
for(i=0; i<(len>>1); i++){
//check that the two digits under question are HEX digits
if(!isxdigit(*(str+2*i)) || !isxdigit(*(str+2*i+1))){
wmem_free(scope, res);
return NULL;
}

//append the byte
sscanf((const char*)(str+2*i), "%02x", &res[i]);
}
return res;
}

此函数在多个地方使用(proto_reg_hanoff_foo 以及 dissect_foo)因此我没有将结果分配给任何特定的池。

在我的 proto_reg_handoff_foo 中,我正在获取函数的返回值,将其复制到另一个内存位置并释放原始结果:

...
if(syskey_str && strlen(syskey_str)){
wmem_free(wmem_epan_scope(), syskey_bytes);
if(tmp = foo_hex2bytes((guchar*)syskey_str, (guint) strlen(syskey_str))){
syskey_len = (guint)strlen(syskey_str)>>1;
syskey_bytes = (guint8*)wmem_alloc(wmem_epan_scope(), strlen(syskey_str)>>1);
memcpy(syskey_bytes, tmp, strlen(syskey_str)>>1);
wmem_free(NULL, tmp);
}
}
...

奇怪的是,我在 wmem_free(NULL, tmp) 行得到一个 windows 触发的断点(或在调试器之外的普通崩溃)。除了在 wmem_core.c:72 处发生错误这一事实之外,我无法收集到真正的调试信息。 .

注意我已经修改了我的 foo_hex2bytes 以接受第三个 wmem_allocator_t 参数并简单地传递了 wmem_epan_scope() (或 wmem_packet_scope() 其中appropriate) - 当应用程序关闭时,这会导致类似的崩溃。我也尝试过使用 malloc() 并手动清除所有内存(有时有效,有时返回 null pointer 即使应用程序仅使用 14K 内存并且还有更多内存可用的)。

编辑:问题似乎存在于 sscanf(...) 行中 - 我没有分配足够的内存,它正在溢出。通过增加分配大小修复。

最佳答案

在调用 foo_hex2bytes 时,您传入了 syskey_str,但是 devkey_str 的长度 - 应该是 的长度syskey_str?

您获得的断点仅意味着堆已因写入超出分配的内存而损坏。

关于c - Wireshark 插件导致 'heap corruption',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com