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、汇编汇编 把汇编工程中的源码源代10000111的源码文件拷至新建工程目录下(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,将上面的源码源代html源码菜单两条都加上。
(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”,并提供了丰富的xs电池源码选项来辅助编译过程。其中,常用选项包括:-E 仅执行预处理,-c 编译或汇编源文件但不执行链接,-S 完成编译但不汇编,仅生成汇编代码,-o 用于指定输出文件名。在 Linux 系统中,未指定输出文件名时,默认输出名为“a.out”,源文件后缀生成为“.o”,汇编文件后缀为“.s”。GCC支持多种环境的代码生成,如使用-m、minio源码编译-m、-m选项生成不同位数环境的代码,例如,-m下int、long和指针类型均为位,-m下int为位,long和指针类型为位,-m与-m类似,但在汇编文件开头添加了gcc汇编制导,用于运行位模式的二进制文件。
编译过程主要分为预处理、编译、汇编和链接四个阶段。stl copy源码下面以一段源码为例,详细分析每个阶段的内容。
首先,预处理过程会展开宏定义和条件编译,生成预处理文件。使用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
以上只是远跳转,近跳转"本句指令字节数"会缩短。