我对以下命令的操作感到困惑:
00401234  mov     dword [esp+0x35], sub_408678

对于上下文,我正在反转一个恶意软件,并且正在使用Binary Ninja,据我所知,它通常针对低级IL使用以下语法命令:
mov    dest, src

第一条命令是否执行了src参数(sub_408678)中指定的子例程并将该命令的结果存储在[esp + 35]中?还是只是移动地址以备后用?我以前从未见过这种语法,我想知道其他人是否曾经看过某个程序这样做/是否可以告诉我用这种方式编写它的目的是什么。谢谢!

#1 楼

src sub_408678可能是您的工具给地址408678提供的标签
[esp + 0x35]目标是指向32位值的指针
它可以接受0x0到0xffffffff
这样的任何内容执行此指令后,00401234 mov dword [esp+0x35], sub_408678 [esp + 0x35将指向0x408678
在高级构造中,这将是
<sometype *>foo ; // here sometype can be int,long,in your cse function_ptr etc 
foo = &blah 

示例代码和反汇编
unsigned long global = 0xdeadbeef;
int main (void) {
    unsigned long *foo;
    foo = &global;
    return *foo;
}

反汇编
:\>cdb -c "uf ptr!main;q" ptr.exe | awk "/Reading/,/quit/"
0:000> cdb: Reading initial command 'uf ptr!main;q'
ptr!main:
01381000 55              push    ebp
01381001 8bec            mov     ebp,esp
01381003 51              push    ecx
01381004 c745fc00903c01  mov     dword ptr [ebp-4],offset ptr!global (013c9000) <<<<<<<
0138100b 8b45fc          mov     eax,dword ptr [ebp-4]
0138100e 8b00            mov     eax,dword ptr [eax]
01381010 8be5            mov     esp,ebp
01381012 5d              pop     ebp
01381013 c3              ret
quit: