Skip to content

修复当变量名长度==8时产生的bug #4

@qqq694637644

Description

@qqq694637644

根据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(请注意是包含),无法正确导出函数

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions