为什么这个IDC脚本找不到所有的功能?

逆向工程 艾达 idapro插件
2021-07-04 01:50:20

测试平台为Linux 32位,ELF文件,GNU coreutils。

基本上我正在尝试使用 IDC 脚本转储所有功能,这是我的 IDC 脚本的一部分:

for (addr = NextFunction(addr); addr != BADADDR; addr = NextFunction(addr)) {
    name = Name(addr);
    end = GetFunctionAttr(addr, FUNCATTR_END);
    locals = GetFunctionAttr(addr, FUNCATTR_FRSIZE);
    frame = GetFrame(addr);
    ret = GetMemberOffset(frame, " r");
    if (ret == -1) continue;
    firstArg = ret + 4;
    args = GetStrucSize(frame) - firstArg;

    dumpFunction(name, addr, end);
}

我用它来测试 GNU coretuils,我发现了一些功能,比如

            public qset_acl
            qset_acl        proc near

            jmp     chmod_or_fchmod
            qset_acl        endp

此脚本无法找到。

难道我做错了什么?任何人都可以给我一些帮助吗?

谢谢!

1个回答

除非必要(即函数访问堆栈参数或局部变量),否则不会创建堆栈帧结构,因此您的(ret == -1)检查会跳过这些存根函数