飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3124|回复: 2

[ASM] 【关闭】call的一个小问题

[复制链接]
  • TA的每日心情
    慵懒
    2023-12-3 12:37
  • 签到天数: 1000 天

    [LV.10]以坛为家III

    发表于 2015-10-9 14:17:54 | 显示全部楼层 |阅读模式
    本帖最后由 n0noper 于 2018-8-26 14:43 编辑

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


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


    CS、EIP入栈不都是call内部执行时做的吗?求解啊。 (试了好几种调用,只发现这种有问题,可能是水平太菜,希望大家看一看)
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

    发表于 2015-10-10 10:52:11 | 显示全部楼层
    没看懂你想说的意思{:soso_e134:}
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2023-12-3 12:37
  • 签到天数: 1000 天

    [LV.10]以坛为家III

     楼主| 发表于 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 [offset MessageBox]
           
            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


    小弟汇编功底太差,还在打基础 -_- 谢谢啦
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表