根据COFF规范,如果符号名称的长度正好是8个字节,那么编译器会在名称后面追加一个空字节,并将其存储在 ShortName 字段中。
修复后代码:
bug复现:
修复前如果导出变量的变量名长度正好为8,那么不会产生shellcode导出
const char *obj::symbol_name(IMAGE_SYMBOL &symbol) {
if (symbol.N.Name.Short != 0) {
// 如果符号名称的长度小于等于8个字节,从 ShortName 中提取
char name[9];
memcpy(name, symbol.N.ShortName, 8);
// 查找字符串的实际长度
size_t length = strnlen(name, 8);
// 添加字符串终止符
name[length] = '\0';
// 返回符号名称
return _strdup(name);
}
导出函数如果的函数名字符串包含hookcall或callfunc(请注意是包含),无法正确导出函数
根据COFF规范,如果符号名称的长度正好是8个字节,那么编译器会在名称后面追加一个空字节,并将其存储在 ShortName 字段中。
修复后代码:
bug复现:
修复前如果导出变量的变量名长度正好为8,那么不会产生shellcode导出
const char *obj::symbol_name(IMAGE_SYMBOL &symbol) {
导出函数如果的函数名字符串包含hookcall或callfunc(请注意是包含),无法正确导出函数