皮皮网

【编程猫kitten源码】【母婴店拍照溯源码】【设X源码=1000 0110】32汇编 源码_汇编源代码

来源:qt 调用驱动 源码 时间:2024-11-23 05:00:07

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、汇编汇编 把汇编工程中的源码源代编程猫kitten源码文件拷至新建工程目录下(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,将上面的源码源代母婴店拍照溯源码两条都加上。

       (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”,并提供了丰富的设X源码=1000 0110选项来辅助编译过程。其中,常用选项包括:-E 仅执行预处理,-c 编译或汇编源文件但不执行链接,-S 完成编译但不汇编,仅生成汇编代码,-o 用于指定输出文件名。在 Linux 系统中,未指定输出文件名时,默认输出名为“a.out”,源文件后缀生成为“.o”,汇编文件后缀为“.s”。GCC支持多种环境的代码生成,如使用-m、算源码补码算数器-m、-m选项生成不同位数环境的代码,例如,-m下int、long和指针类型均为位,-m下int为位,long和指针类型为位,-m与-m类似,但在汇编文件开头添加了gcc汇编制导,用于运行位模式的二进制文件。

       编译过程主要分为预处理、编译、汇编和链接四个阶段。迅雷php云点播源码下面以一段源码为例,详细分析每个阶段的内容。

       首先,预处理过程会展开宏定义和条件编译,生成预处理文件。使用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

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