1.W32DasmçW32Dasmçåºç¨åä½ç¨
2.请问怎么在vc6上运行win32汇编文件
3.Gcc 和 Clang
4.汇编中的汇编汇编JMP后面的值也就是E9 XXXX怎样计算的
W32DasmçW32Dasmçåºç¨åä½ç¨
WDasmæ¯ä¸ä¸ªå¼ºå¤§çåæ±ç¼å·¥å ·ï¼æä½ç®åï¼ä½¿ç¨æ¹ä¾¿ãé常被ç¨åºå使ç¨ï¼å½ç¶ä¹å¯è¢«ç¨æ¥Crack软件äºï¼å¾éåCracker使ç¨ãæå¨è¿æä¸crackç¸å ³çåè½ç®è¿°å¦ä¸ï¼1.0 å¼å§
2.0 ä¿ååæ±ç¼ææ¬æ件åå建æ¹æ¡æ件
3.0 åæ±ç¼ææ¬ä»£ç çåºæ¬æä½
4.0 å¤å¶æ±ç¼ä»£ç ææ¬
5.0 è£ è½½ä½çæ±ç¼ä»£ç å¨æè°è¯
6.0 è¿è¡ï¼æåæç»æ¢ç¨åº
7.0 åæ¥è·è¸ªç¨åº
8.0 设置æ¿æ´»æç¹
9.0 å移å°ååèæå°å转æ¢
1.0 å¼å§
1.1 è¿è¡WDasmï¼å¨è¿é以windowsèªå¸¦ç计ç®å¨ä¸ºä¾ï¼calc.exeã
1.2 ä»Disassemblerï¼åæ±ç¼ï¼èåéæ©Disassembler Optionsï¼åæ±ç¼ç¨åºé项ï¼é项å°åºç°å¦ä¸å¯¹è¯æ¡ã
1.3 å¨Disassemblerï¼åæ±ç¼ï¼èåï¼éæ©Open Fileï¼æå¼æ件ï¼é项ææå·¥å ·æ æé®ã
1.4 éæ©ä½ è¦æå¼çæ件就å¯ã
注æï¼ä½ åæ±ç¼æ件åï¼å¦åç¬¦å·±è¶ è¿å±å¹å¤ï¼è¿æ¶ä½ è¦éæ©åéçåä½ï¼å¨Fontåä½é项ä¸Select Fontéæ©åä½ï¼ ï¼ç¶å设为é»è®¤åä½ï¼Save Default Fontï¼å³å¯ã å½ç¶ä¸è¬ä»¥é»è®¤å¼å°±å¯ã
2.0 ä¿ååæ±ç¼ææ¬æ件åå建æ¹æ¡æ件(Save The Disassembly Text and Create A Project File )
ç¥ã
3.0 åæ±ç¼æºä»£ç çåºæ¬æä½
3.1 转å°ä»£ç å¼å§ï¼Goto Code Startï¼
å¨å·¥å ·æ ææä»èåç转å°(Goto)é项éæ©è½¬å°ä»£ç å¼å§ï¼Goto Code Startï¼ ææCtrl S, è¿æ ·å æ å°æ¥å°ä»£ç çå¼å§å¤ï¼ç¨æ·å¯éè¿åå»é¼ æ æç¨shift+ä¸ä¸å æ é®æ¹åå æ çä½ç½®ã
注ï¼ä»£ç çå¼å§å¤æ¯åæ±ç¼ä»£ç åè¡¨æ¸ åæ±ç¼æ令çå¼å§ï¼èä¸æ¯ä»£ç è¿è¡çèµ·ç¹ï¼ç¨åºè¿è¡çèµ·ç¹ç§°ä¸ºç¨åºå ¥å£ç¹ï¼Program Entry Pointï¼ã
3.2 转å°ç¨åºå ¥å£ç¹ï¼Goto Program Entry Pointï¼
å¨å·¥å ·æ ææèåç转å°(Goto)é项éæ© è½¬å°ç¨åºå ¥å£ç¹ï¼Goto Program Entry Pointï¼ææF,è¿æ ·å æ å°æ¥å°ç¨åºå ¥å£ç¹(Entry Point),è¿éå°±æ¯ç¨åºæ§è¡çèµ·å§ç¹ï¼ä¸è¬å¨æè°è¯æ¶LOADæ¶ä¹å°±åå¨æ¤å¤ã
3.3 转å°é¡µï¼Goto Pageï¼
å¨å·¥å ·æ ææèåç转å°(Goto)é项éæ©è½¬å°é¡µï¼Goto Pageï¼ææF,è¿æ¶è·³åºä¸å¯¹è¯æ¡ï¼è¾å ¥é¡µæ°å¯è·³è½¬å°ç¸å ³é¡µé¢å»ã
3.4 转å°ä»£ç ä½ç½®ï¼Goto Code Locationï¼
å¨å·¥å ·æ ææèåç转å°(Goto)é项éæ©è½¬å°ä»£ç ä½ç½®ï¼Goto Code Locationï¼ææF,ä¸ä¸ªå¯¹è¯æ¡å°åºç°ï¼å 许ç¨æ·è¾å ¥ä»£ç å移å°åï¼ä»¥è·³è½¬å°æ¤ä½ç½®ä¸å»ã
3.5 æ§è¡ææ¬è·³è½¬ï¼Execute Text Jumpï¼
è¿åè½æ¯å¨Execute Textï¼æ§è¡ææ¬ï¼èåé项éçï¼æ§è¡è·³è·ï¼Execute Jumpï¼åè½æ¿æ´»æ¡ä»¶æ¯å æ å¨ä»£ç ç跳转æ令è¿è¡ä¸ï¼è¿æ¶å æ¡æ¯é«äº®åº¦ç绿é¢è²ï¼ãæ¤æ¶å·¥å ·æ¡Jump Toæé®ä¹æ¿æ´»ãå¦å¾ï¼
æ¤æ¶ææèåé项Execute Jumpï¼æ§è¡è·³è·ï¼ææå³å æ é®ï¼å æ¡å°æ¥å°è·³è½¬æ令ææå°çä½ç½®ãå¨è¿ä¾åéï¼å°æ¥å°:CE xor eax,eax è¿ä¸è¡ä»£ç å¤ï¼
å¦è¦è¿åå°ä¸ä¸æ¬¡è·³è·ï¼è¯·åè3.6.
3.6 è¿åå°ä¸ä¸æ¬¡è·³è·Return From Last Jump
è¿åè½æ¯å¨Execute Textï¼æ§è¡ææ¬ï¼èåé项éçï¼æ¤æä»¤ä» ä» æ¯å¨ æ§è¡ææ¬è·³è½¬åè½å®æåææ¿æ´»ãå½è¿æ¡ä»¶æç«æ¶ï¼æé®å°æ¿æ´»ãææå¨èåéé项è¿åå°ä¸ä¸æ¬¡è·³è·ï¼Return From Last Jumpï¼ææå·¦å æ é®ï¼å æ¡å°è¿åå°ä¸ä¸æ¬¡è·³è·ä½ç½®å¤ã
3.7 æ§è¡å¼å«Execute Text Call
è¿åè½æ¯å¨Execute Textï¼æ§è¡ææ¬ï¼èåé项éçï¼æ¤åè½æ¿æ´»çæ¡ä»¶æ¯å æ¡å¨CALLæ令ä¸è¡ãå¨è¿ä¸è¡æ¶å æ¡å°å绿ï¼æé®å°æ¿æ´»ãæ§è¡æ¶å æ¡å°ä¼æ¥å°CALLææçå°åå¤ã
å¦ä¸å¾ï¼ å æ¡å¨D call D4 ä¸è¡ã
æ¤æ¶ææå¨èåçæ§è¡å¼å«ï¼Execute Text Callï¼ææå³å æ é®ï¼å æ¡å°æ¥å°CALLææçå°åD4è¿ä¸è¡ã
å¦è¦è¿åå°åæèµ·ç¹çD call D4 ä¸è¡ï¼åè3.8çè¿åå¼å«ã
3.8 è¿åå¼å«(Return From Last Call)
è¿åè½æ¯å¨Execute Textï¼æ§è¡ææ¬ï¼èåé项éçï¼æ¤æä»¤ä» ä» æ¯å¨æ§è¡å¼å«Execute Text Callåè½å®æåææ¿æ´»ãå½è¿æ¡ä»¶æç«æ¶ï¼æé®å°æ¿æ´»ãææå¨èåéé项è¿åå¼å«(Return From Last Call)ææå·¦å æ é®ï¼å æ¡å°è¿åå°ä¸ä¸æ¬¡å¼å«ä½ç½®å¤ã
3.9 å¯¼å ¥åè½ï¼Importedï¼
å¨èååè½é项éï¼å ¶ä½ç¨ä¸»è¦æ¯æ¥çimportå½æ°ãææå¨èååè½é项éçå¯¼å ¥ï¼Importsï¼å½ä»¤ï¼æ§è¡åå°ååºå½åæ件çImportå½æ°ã
å¦è¦è¿åå°åæèµ·ç¹çD call D4 ä¸è¡ï¼åè3.8çè¿åå¼å«ã 5.0 è£ è½½ä½çæ±ç¼ä»£ç å¨æè°è¯
5.1 åæ±ç¼windowsèªå¸¦ç计ç®å¨ç¨åº calc.exe.
5.2 éæ©èåè°è¯é项ä¸çå è½½å¤ç(Load Processï¼ï¼ææCtrl+L.åºç°ä¸ä¸ªå 载对è¯æ¡ï¼ä½ å¯è¾å ¥é项å½ä»¤ãç°å¨ä½ å¯æè£ è½½ï¼loadï¼æé®ã
Calc.exeç°å¨è¢«WDASMå¨æè°è¯ï¼å°åºç°å·¦å³ä¸¤ä¸ªè°è¯çªå£ï¼å¦ä¸å¾ï¼ï¼å¨åå§åcalc.exeç¨åºåï¼æ令å°åçå¨å ¥å£ç¹ï¼Entry Pointï¼å¤ã
左边çè°è¯çªå£ååºåç§ç¶æå¨å¦ï¼CPUå¯åå¨ï¼CPUæ§å¶å¯åå¨ï¼æç¹ï¼æ´»å¨çDLLï¼æ®µå¯åå¨ççï¼
6.0 è¿è¡ï¼æåæç»æ¢ç¨åº
6.1 å¨å³è°è¯çªå£ï¼æè¿è¡ï¼RUNï¼æé®ææF9,calc.exeå°è¿è¡èµ·æ¥ã
ææåï¼PAUSEï¼æé®æç©ºæ ¼é®ï¼ç¨åºå°æåï¼è¿å¨åæ¥è·è¸ªæ¶ç»å¸¸ç¨å°ã
æç»æ¢(TERMINATï¼æé®ï¼ç¨åºå°åæ¢ï¼éåºå¨æè°è¯ç¯å¢ã
7.0åæ¥è·è¸ªç¨åº
7.1 éæ°å è½½ calc.exe
7.2 å¨ç¨åºå è½½åï¼åçå¨å ¥å£ç¹ï¼ä½ å¯æF7æF8åæ¥è°è¯ç¨åºï¼è¿ä¸¤ä¸ªé®æä¸åçæ¯F7æ¯è·è¿CALLéï¼F8æ¯è·¯è¿ã
7.3 è¿å ¥èªå¨è°è¯æ (F5) åç»æèªå¨è°è¯æ (F6) ã
8.0设置æ¿æ´»æç¹
8.1 éæ°å è½½ calc.exe
8.2 å¨WDASMçèå转å°é项转å°ä»£ç å¤(goto code)åè½ï¼å¡«ä¸ï¼æç¡®å®ï¼ä½ å°å¨WDasmç主çªå£ï¼æ¤æ¶å¯è½æå°åäºï¼æå ¶è¿åå³å¯ï¼æ¥å°å°åä¸è¡ãå æ¡å¨è¿ä¸è¡æ¾äº®ç»¿è²ï¼æF2æç¨é¼ æ å·¦ç¹å»æ左边ï¼åæ¶æä½CTRLï¼è®¾ç½®æç¹ã
è¿æ¶å¦æç¹è®¾ç½®æåï¼å æ¡æ左边æä¸å°æ®µé»æ¡ï¼æ¾ç¤ºæ¤è¡ä¸ºæç¹ãå¦ä¸å¾ï¼
å¦ææç¹ä¸å¨è¿éï¼æ´è¡å æ¡å°æ¯é»è²çã
å½æç¹è®¾ç½®å¥½åï¼å¨å·¦è°è¯çªå£ä¸çæç¹å°çªå£æ¾ç¤ºæç¹æ åµï¼å³è¾¹æä¸ï¼ï¼
æ¤æ¶æF2æï¼é¼ æ å·¦é®+CTRLï¼ï¼æç¹å°åæ¶ã
8.3 æ¤æ¶æF9ç¨åºå°è¿è¡å°ç¸å ³æç¹æ¶åæ¢ã
9.0 å移å°ååèæå°å转æ¢
WDASMãSOFTICEåHiewï¼Decode模å¼ï¼æ¾ç¤ºçå°åé½æ¯èæå°åï¼ä½æ¯å¨Hiewï¼Decode模å¼ï¼ä¸ï¼F5åè½é®æ¥æ¾çå°åæ¯å移å°åï¼å æ¤å¿ é¡»å°èæå°å转æ¢æå移å°åï¼æè½æ¾å°æ£ç¡®çå°åã常ç¨çæ¹æ³æ¯å¨WDASMä¸å°ç»¿è²çå æ¡ç§»å°æä¸è¡ä»£ç ä¸ , å¨çªå£åºé¨æä¸è¡åæç¤ºå ¶å移å°å , å¦èä¼¼å°åï¼Code DaTa@eèå移å°å为ï¼@Offset Eh. è¿å°±æ¯å移å°åã
请问怎么在vc6上运行win汇编文件
编程环境:VC6.0,Masmv8
方法如下:
1、源码源代 使用VC6新建一个空工程如test(win console,汇编汇编win application等均可)。源码源代
2、汇编汇编 把汇编工程中的源码源代木叶传说游戏源码文件拷至新建工程目录下(hello.asm,hello.rc),汇编汇编并把这些文件加入工程中(将*.asm添加到Source Files,源码源代 将*.rc添加到Resource Files)。
3、汇编汇编 配置IDE:
(1)、源码源代tools/option,汇编汇编Directories下的源码源代Include files,Directories:中添加一个路径d:/MASM/INCLUDE 这是假设你的Masmv8安装在d:/MASM
(2)、打开工程设置(project settings),汇编汇编点击*.asm文件选择(Custom Build),
命令中加上: ml /c /coff /Zi /Fo$(TargetDir)/$(InputName).obj $(InputPath)
输出中加上: $(TargetDir)/$(InputName).obj
注意选Settings for: Win Debug 和 Win release,将上面的源码源代android图片识别源码两条都加上。
(3)、汇编汇编将WinASM中的ml.exe和ml.err拷贝到C:/Program Files/ Microsoft Visual Studio/VC/Bin
5、点击VC的编译就可以运行了。
至此就可以使用VC调试器源码级调试汇编程序了,可以设置断点,察看变量、内存、寄存器等,masm出现语法错误时可以双击output window中的错误行定位到程序中的指定行。
为了不在debug和release目录中产生超大的预编译头文件xxxx.pch,在工程设置(project settings)中的C/C++ -> Precompiled Headers的选项上选择
"不使用预编译头",其实就现在的电脑而言,不使用预编译头也能快速地编译C代码的.
Gcc 和 Clang
GCC 编译器作为 Linux 系统下的主要 C/C++ 编译工具,广泛安装于多数 Linux 发行版中。其命令形式通常为“gcc”,并提供了丰富的租技能源码选项来辅助编译过程。其中,常用选项包括:-E 仅执行预处理,-c 编译或汇编源文件但不执行链接,-S 完成编译但不汇编,仅生成汇编代码,-o 用于指定输出文件名。在 Linux 系统中,未指定输出文件名时,默认输出名为“a.out”,源文件后缀生成为“.o”,汇编文件后缀为“.s”。GCC支持多种环境的代码生成,如使用-m、mvc前台表格源码-m、-m选项生成不同位数环境的代码,例如,-m下int、long和指针类型均为位,-m下int为位,long和指针类型为位,-m与-m类似,但在汇编文件开头添加了gcc汇编制导,用于运行位模式的二进制文件。
编译过程主要分为预处理、编译、汇编和链接四个阶段。新闻类软件源码下面以一段源码为例,详细分析每个阶段的内容。
首先,预处理过程会展开宏定义和条件编译,生成预处理文件。使用cpp命令执行预处理,得到的sample.i文件中,宏定义和条件编译已根据实际情况展开,宏引用被替换为实际值。通过-D指令可以自定义宏的值,进行预处理。在Linux系统下,通过“man gcc”可查询GCC命令的详细用法。
接着,GCC将预处理文件编译为汇编代码,生成汇编文件。汇编文件包含了核心的汇编代码,展示了编译过程中的汇编指令和数据操作。对比位机器和位机器汇编代码的差异,可以发现主要在于寄存器的位宽和指令的位宽不同。
汇编代码中,.cfi_startproc和.cfi_endproc用于初始化和结束本地数据结构,本地标签用于分支目的地标记。基本汇编指令如pushl、movl、subl、cmpl、je、addl、sall、ret、movl等,分别用于操作寄存器、存储数据、进行算术运算和逻辑运算、控制流程等。了解这些基本指令的用途有助于深入理解程序的执行流程。
使用GCC的-c选项编译源代码为机器代码,通过-o选项指定输出文件名。可以使用as命令得到机器语言,通过objdump指令查看目标文件的机器码,反汇编指令帮助理解机器码的含义。在程序中发现符号定义冲突时,可以使用nm命令列出目标文件中的符号,快速定位问题。
最后,链接器(ld)将编译生成的目标文件链接为可执行文件。链接过程中,链接器解析未定义的符号引用,将目标文件中的占位符替换为实际的符号地址。如果缺少必要的CRT文件,ld会生成警告。可通过查询/usr/lib/x_-linux-gnu路径找到CRT文件。C运行时文件(CRT)包含程序入口函数_start,负责调用__libc_start_main初始化libc,并调用main函数;_init函数在main函数前运行;_fini函数在main函数后运行。链接时使用-lc选项链接C标准库。
Clang 是一个基于LLVM的C/C++编译器,提供C/C++/Objective C/Objective C++语言的编译支持,旨在超越GCC。Clang预处理、生成汇编代码、生成目标文件、得到可执行文件的过程与GCC类似,但Clang提供了更多的特性,如更快的编译速度、更好的错误诊断和更先进的类型推断能力。使用Clang替代GCC进行C程序编译时,可以体验到这些额外的优势。
Clang编译过程包含预处理、生成位和位机器汇编代码、生成目标文件和得到可执行文件等步骤。使用Clang编译后的汇编代码、目标文件和可执行文件与GCC编译结果一致,但Clang在性能和语言支持方面可能具有优势。
汇编中的JMP后面的值也就是E9 XXXX怎样计算的
你这是位汇编,x的值转换成汇编编码的规律:
jmp H
IP1=EDH
IP2=H
IP2-(IP1+本句指令字节数)=2-(4EDH+5)=0FFBH
Jmp H
IP1=EDH
IP2=H
IP2-(IP1+本句指令)=-(4EDH+5)=FFBC2H
汇编里的数次序要反过来:
E9 CB1FF
以上只是远跳转,近跳转"本句指令字节数"会缩短。