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: