n0noper 发表于 2015-10-9 14:17:54

【关闭】call的一个小问题

本帖最后由 n0noper 于 2018-8-26 14:43 编辑

网上看到一个问题:push 0
push offset szCaption
push offset szText
push 0
call dword ptr


结果反汇编代码:
...
push 0;这个是第二个push 0
push cs
call MessageBoxA


CS、EIP入栈不都是call内部执行时做的吗?求解啊。 (试了好几种调用,只发现这种有问题,可能是水平太菜,希望大家看一看)

Rooking 发表于 2015-10-10 10:52:11

没看懂你想说的意思{:soso_e134:}

n0noper 发表于 2015-10-10 14:28:37

Rooking 发表于 2015-10-10 10:52
没看懂你想说的意思

一切尽在代码中:
        .386
        .model        flat, stdcall
        option        casemap:none
       
include                windows.inc
include                kernel32.inc
includelib        kernel32.lib
include                user32.inc
includelib        user32.lib

.data
szCaption        db        'Msg', 0
szText                db        'Hello, World', 0

.code
start:
        push        0
        push        offset szCaption
        push        offset szText
        push        0
        call        dword ptr
       
        invoke        ExitProcess, 0
       
        ret
end        start



;以下是反汇编代码
00401000 > PUSH 0
00401002| PUSH a.00403000                        ; /Style = MB_OK|3000|400000
00401007| PUSH a.00403004                        ; |Title = "Hello, World"
0040100C| PUSH 0                                 ; |Text = NULL
0040100E| PUSH CS                                  ; |hOwner
0040100F| CALL <JMP.&USER32.MessageBoxA>         ; \MessageBoxA
00401014| PUSH 0                                 ; /ExitCode = 0
00401016\ CALL <JMP.&KERNEL32.ExitProcess>         ; \ExitProcess
0040101B    RETN
0040101C    JMP DWORD PTR DS:[<&KERNEL32.ExitProcess>;kernel32.ExitProcess
00401022    JMP DWORD PTR DS:[<&USER32.MessageBoxA>] ;USER32.MessageBoxA


小弟汇编功底太差,还在打基础 -_- 谢谢啦
页: [1]
查看完整版本: 【关闭】call的一个小问题