[求助]求WinExec()执行外部程序的汇编代码
计划把一个外部程序Wpop.exe通过一个入口,用 WinExec()的方式调出,这个WinExec(''Wpop.exe'',SW_SHOW)语句的汇编指令应该是:
push SW_SHOW
push CmdLine='Wpop.exe'
call WinExec
ret
可是第二句Wpop.exe我怎么也压不进栈里,问题出在哪里呢?
特向各位讨教。
push 3 窗口最大化
push 5 保持现在窗口大小即 push SW_SHOW 等于push 5
这个方法只对和本机一样版本的kernel32.dll有效,否则要用下面的方法:
正确的方法是用PE编辑工具,如LordPE打开你要改的文件,看看输入表中有没有WinExec这个函数。如果有的话你要记下这个函数的ThunkRVA,假设这个ThunkRVA是12345678,你在OD中调用WinExec时就该这么写:call dword ptr[12345678],这样才是正确的,就算是放到别的系统上也照样运行正常。这里的ThunkRVA地址里面是系统中具体WinExec函数的值,由系统填充,这样你调用就不会出错了。如果原程序的输入表中没这个函数,你可以用PE工具添加一个。至于你那个pp.exe,正确的方法是先用16进制工具在程序中找个空白的地方(就是全部是0的,程序运行时用不到的)写入pp.exe的ASCII码,记下写入的地址,如11111111,保存后用OD载入,调用时就是push 11111111,就是你那个pp.exe。