zoukankan      html  css  js  c++  java
  • masm

      其实这个我自己出给自己的练习题现在都还没做对。。。虽然看得懂一点汇编指令,但我还是不理解寄存器以及对它们正确的使用,断断续续的学汇编,进步超缓慢。。而且一段时间不写,连指令作用都忘了。

      最早电脑装了 gcc,用的nasm,但后来不想用 gcc 了,一直在用 msvc,然后 nasm 无法与 msvc 链接生成 exe 文件(可能我太菜了,没找到正确姿势),但用微软自带的汇编器 ml 也不错,虽然语法稍有些不同,但指令都差不多,不过就很恼火的是一直无法调用 printf / scanf 。。。只能用win32api MessageBox 或 WriteFile 代替输出,但输入呢?

      这是我的错误解决方案(鬼知道我用反汇编调了多少次,才稍微明白了一点汇编逻辑,如今 crack me 还是只会字节修补(捂脸)):

    extrn MessageBoxA: PROC
    extrn ExitProcess: PROC
    
    .data
    ti db 'result', 0
    msg db 'phahhb', 0
    
    .code
    main proc
        sub     rsp, 28h
        mov     eax, offset msg
        ;lea     edx, [eax+1]
    
    loc_401086:
        mov     cl, [eax]
        cmp     cl, 0
        jmp     loc_401B12
        inc     eax
        cmp     cl, 61h
        jl      short loc_401086
        ;test    cl, cl
        sub     cl, 20h
        mov     [eax], cl
        jmp     loc_401086
    
    loc_401B12:
        mov     rcx, 0       ; hWnd = HWND_DESKTOP
        lea     rdx, [eax]   ; LPCSTR lpText
        lea     r8, ti   ; LPCSTR lpCaption
        mov     r9d, 0       ; uType = MB_OK
        call    MessageBoxA
        add     rsp, 28h  
        mov     ecx, eax     ; uExitCode = MessageBox(...)
        call    ExitProcess
    main endp
    
    End
    

      虽然我知道 mov [eax], cl 那里是不对的,应该写入另一个寄存器,但我竟然蠢到不知道该写到哪个寄存器里面才能改变 eax 的对应位置上的字符。。。

      下面是我自己写的 bat,以方便运行汇编小项目,可以改改做模板用:

    @echo off
    call "C:Program Files (x86)Microsoft Visual Studio2019CommunityCommon7ToolsVsDevCmd.bat"
    d:
    cd D:AssembleProjectshello
    ml64 "D:AssembleProjectshellohello.asm" /link /subsystem:windows /DYNAMICBASE "C:Program Files (x86)Windows Kits10Lib10.0.18362.0umx64kernel32.lib" "C:Program Files (x86)Windows Kits10Lib10.0.18362.0umx64user32.lib" /LARGEADDRESSAWARE:NO /OUT:"D:AssembleProjectshellohello.exe" /entry:main
    "D:AssembleProjectshellohello.exe"
    pause
    

      

  • 相关阅读:
    完全图解scrollLeft,scrollWidth,clientWidth,offsetWidth 获取相对途径,滚动图片
    Input的size,width,maxlength属性
    Linux,VI命令详解
    Javascript 第十章
    Javascript 第七章
    IE css hack
    Javascript 第九章
    js中document.documentElement 和document.body 以及其属性
    关于xmlhttp.status == 0的问题
    Javascript 第八章
  • 原文地址:https://www.cnblogs.com/darkchii/p/12758113.html
Copyright © 2011-2022 走看看