欢迎来到皮皮网网首页

【木叶传说游戏源码】【android图片识别源码】【租技能源码】32汇编 源码_汇编源代码

来源:拼多多源码骗局 时间:2024-11-25 03:56:05

1.W32Dasm的W32Dasm的应用及作用
2.请问怎么在vc6上运行win32汇编文件
3.Gcc 和 Clang
4.汇编中的汇编汇编JMP后面的值也就是E9 XXXX怎样计算的

32汇编 源码_汇编源代码

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

       以上只是远跳转,近跳转"本句指令字节数"会缩短。