jmp指令的绝对地址转移的格式?

snowingedge 2001-04-15 12:20:00
比如:jmp 0x1c230079
要跳到 cs:1c230079 的绝对地址,它的16进制编码是什么啊?
谢谢了先~
...全文
226 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengnan 2001-04-20
  • 打赏
  • 举报
回复
jmp的机器码是0eah, 比如说cs=1e00,目的偏移=1c230079,可以这样写

16位偏移的段间转移指令:
db 0eah ;操作码
dw offset ;16位偏移
dw selector ;段值/选择子

32位偏移的段间转移指令:
db 0eah ;操作码
dw offset1 ;偏移低16位
dw offset2 ;偏移高16位
dw selector ;选择子

要转移到一个绝对地址,可以先换算出相应的段值和偏移,再用上面的指令
[注]32为段间转移指令只适用于保护模式下
Areslee 2001-04-15
  • 打赏
  • 举报
回复
段内直接调用:0xe9 目标处的偏移地址
段间直接调用:0xea 目标处的偏移地址,目标的段地址/选择符
Linux下AT&T汇编语法格式简介 一、AT&T 格式Linux 汇编语法格式 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如: AT&T 格式 Intel 格式 pushl %eax push eax 在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如: AT&T 格式 Intel 格式 pushl $1 push 1 AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而在 AT&T 汇编格式中,目标操作数在源操作数的右边。例如: AT&T 格式 Intel 格式 addl $1, %eax add eax, 1 在 AT&T 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀'b'、'w'、'l'分别表示操作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中,操作数的字长是用 "byte ptr" 和 "word ptr" 等前缀来表示的。例如: AT&T 格式 Intel 格式 movb val, %al mov al, byte ptr val 在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。 远程转移指令和远程子调用指令的操作码,在 AT&T 汇编格式中为 "ljump" 和 "lcall",而在 Intel 汇编格式中则为 "jmp far" 和 "call far",即: AT&T 格式 Intel 格式
51汇编语言指令集 符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数 #data16 16位常数 Addr16 16位的目标地址 Addr11 11位的目标地址 Rel 相关地址 bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位 指令介绍 指令 字节 周期 动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器 2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器 3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器 4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结果存回累加器 13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器 28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器 29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址 30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址 31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器 33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器 34.ORL A,#data 2 1 将累加器的
第一章 汇编语言程序设计的实验环境及实验步骤 知识提要: 本章主要进行汇编语言实验环境及实验步骤,涉及到的知识点包括: 1、汇编语言源程序编写好以后, 必须经过下列几个步骤才能在机器上运行: (1) 编辑源程序(生成.ASM文件) (2) 汇编源程序(.ASM → .OBJ) (3) 连接目标程序(.OBJ → .EXE ) (4) 调试可执行程序(使用调试程序Debug调试生成的.EXE文件) (5) 运行程序输出结果。 2、 Windows环境下的汇编语言集成编程环境的使用 实验一 DOS环境下的汇编语言编程环境使用(基础与验证型) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM的使用; 4、熟练掌握连接程序LINK的使用。 二、软硬件环境 1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存; 2、软件环境:装有MASM 5.0、DEBUG、LINK、EDIT、CREF.EXE和EXR2BIN.EXE等应用程序。 三、实验涉及的主要知识单元 1、汇编语言源程序的汇编过程 汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3个文件:扩展名为 .OBJ的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。.LST和.CRF两个文件不是必须建立的,可有有无,可以通过汇编时的命令加以选择。 在对源程序文件(ASM文件)汇编时,汇编程序将对ASM文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即OBJ文件。因此,汇编程序的主要功能可以概括为以下三点: (1) 检查源程序中的语法错误,并给出错误信息;(2) 产生目标程序文件(OBJ文件),并可给出列表文件(.LST文件);(3) 展开宏指令。 汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有Microsoft公司推出的宏汇编程MASM(MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)两种。Microsoft公司推出有宏汇编程序MASM和小汇编程序ASM两种,二者的区别在于:MASM有宏处理功能,而ASM没有宏处理功能,因此,MASM比ASM的功能强大,但MASM需要占据较大的内存空间,当内存空间较小时(如64 KB),只能使用ASM。 2、目标程序的连接过程 汇编后产生的目标程序(OBJ文件)并不是可执行程序文件(EXE文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个文件,一是扩展名为 .EXE的可执行文件,另一个是扩展名为 .MAP 的内存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,该文件可有可无。连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。所以,到此为止,连接过程已经结束,可以在操作系统下执行该.EXE程序了。 3、汇编语言和DOS操作系统的接口 编写的汇编语言源程序是在DOS环境下运行时,必须了解汇编语言是如何同DOS操作系统接口的。 用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区PSP,其长度为256个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开始处(偏移地址0000H)安排了一条INT 20H软中断指令。INT 20H中断服务程序由DOS提供,执行该服务程序后,控制就转移到DOS,即返回到DOS管理的状态。因此,用户在组织程序时,必须使程序执行完后能去执行存放于PSP开始处的INT 20H指令,这样便返回到DOS,否则就无法继续键入命令和程序。 DOS在建立了程序段前缀区PSP之后,将要执行的程序从磁盘装入内存。在定位程序时,DOS将代码段置于PSP下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,DOS就设置段寄存器DS和ES的值,以使它们指向PSP的开始处,即INT 20H的存放地址,同时将CS设置为PSP后面代码段的段地址,IP设置为指向代码段中第一条要执行的指令位置,把SS设置为指向堆栈的段地址,让SP指向堆栈段的栈底,然后系统开始执行用户程序。为了保证用户程序执行完后能返回到DOS状态,可使用如下两种方法。 (一)标准方法 首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT 20H 指令的段地址及偏移地址压入堆栈: PUSH DS ;保护PSP段地址 MOV AX,0 ;保护偏移地址0 PUSH AX 这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而执行INT 20H指令,使控制返回到DOS状态。返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:\>。 (二)非标准方法 也可在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS之前)增加两条语句: MOV AH,4CH INT 21H 则程序执行完后也会自动返回DOS状态。 此外,由于开始执行用户程序时,DS并不设置在用户的数据段的起始处,ES同样也不设置在用户的附加段起始处,因而在程序开始处使用以下方法重新装填DS和ES的值使其指向用户的数据段: MOV AX,段名 MOV 段寄存器名,AX ;段寄存器名可以是DS、ES、SS之一 四、实验内容与步骤 1、实验内容 编写程序,判断一个年份是否是闰年。 2、实验步骤 汇编语言程序设计上机过程如图1.1所示。 图1.1 汇编语言程序上机过程 (一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件) 例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如: C> EDIT ABC.ASM 进入EDIT的程序编辑画面时,输入汇编语言源程序如下: DATA SEGMENT INFON DB 0DH,0AH,'Please input a year: $' Y DB 0DH,0AH,'This is a leap year! $' N DB 0DH,0AH,'This is not a leap year! $' W DW 0 BUF DB 8 DB ? DB 8 DUP(?) DATA ENDS STACK SEGMENT 'stack' DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX LEA DX,INFON MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H MOV CL, [BUF+1] LEA DI,BUF+2 CALL DATACATE CALL IFYEARS JC A1 LEA DX,N MOV AH,9 INT 21H JMP EXIT A1: LEA DX,Y MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H DATACATE PROC NEAR LEA SI,BUF+2 MOV BX,0 X3: MOV AL ,[SI] SUB AL ,30H MOV AH,0 XCHG AX,BX MOV DX,10D MUL DX XCHG AX,BX ADD BX,AX INC SI LOOP X3 MOV W,BX RET DATACATE ENDP IFYEARS PROC NEAR PUSH BX PUSH CX PUSH DX MOV AX,W MOV CX,AX MOV DX,0 MOV BX,4 DIV BX CMP DX,0 JNZ LAB1 MOV AX,CX MOV BX,100 DIV BX CMP DX,0 JNZ LAB2 MOV AX,CX MOV BX,400 DIV BX CMP DX,0 JZ LAB2 LAB1: CLC JMP LAB3 LAB2: STC LAB3: POP DX POP CX POP BX RET IFYEARS ENDP CODE ENDS END START (二)用汇编程序MASM将ASM文件汇编成目标程序文件(OBJ文件) 当源程序建立以后,仍以ABC.ASM程序为例,我们用汇编程序MASM对ABC.ASM源程序文件进行汇编,以便产生机器码的目标程序文件ABC.OBJ,其操作步骤如下: C>MASM ABC Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981–1985,1987. All rights reserved. Object filename [ABC.OBJ]: Source listing [NUL.LST]:ABC Cross-reference [NUL.CRF]:ABC 50674 + 450574 Bytes symbol space free 0 Warning Errors 0 Severe Errors 由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。 第一个提示行为:Object filename [ABC.OBJ]: 这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。 第二个提示行为: Source listing [NUL.LST]:
但愿大家互相进修进修,大家对于破解都不是很了解,人们想学破解,可是去无从入手,所以决议为大家写1个破解初级读物的教程,但愿能大家了解破解有一些帮忙,但愿能有更多的人踏入破解的大门   1.低级,修改步伐,用ultraedit等东西修改exe文件,称暴力破解,略称爆破   中级,追出软体的注册码   高级,开具注册机   2.经常使用破解东西   (1)侦壳东西:PEiD   (2)消息联合的OllyDbg引领破解东西的新潮水   一,此刻咱们起首来进修下破解的开端,爆破~   1.侦壳   要破解1个软体起主要做的就是侦壳,要侦壳就要对壳有绝对似的了解,家喻户晓,软体作者用编程语言编著好软体后,是将它编译成扩展名为EXE的可执行文件编译为EXE的目的有两点:   (1)有一些版权信息需要掩护起来,不克不及让别人随心改动,如作者的姓名、软体名称等;   (2)需要给步伐"瘦身",从而利便存储、使用以及网上传道输送   为了编译,会用到一些软体它们能将可执行文件压缩以及对信息加密(图1),实现上面所说的两个功效,这些个软体称为加壳软体为软体加上的东东就称为"壳"加壳软体差别于一般的WinZIP、WinRAR等打包类压缩软体加壳软体是压缩可执行文件的,压缩后的文件可以直接运行   最多见的加壳软体有3个:ASPACK 、UPX、PEcompact终究它们是主流,据计数,用它们加壳的软体约占市面所有软体的90%!其它不经常使用的加壳软体有ASPROTECT、PETITE 、NEOLITE、TELOCK等软体最多见的编程语言是Delphello,Visual Basic(略称VB),Visual C++(略称VC)了解些编程的常识,会让破解更加轻车熟道   底下来讲侦壳,此刻比力经常使用侦壳软体就PeiD,他具备华美的图形界面外壳整合(新增到鼠标右键)功效令使用更加利便,撑持拖放操作配置时,务请将"扩展到鼠标右键"打上对号   其使用要领是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"便可;"壳"的信息就显示在底部   2.破解东西OD   有关OD的先容我把他放到附件里了,这个是看雪论坛的先容,是比力周全的,至少我感觉比我写的要好,所以大家根据他可以大好的了解OD   3.爆破实例   爆破是破解的开端,所说的爆破,就是指路程经过过程修改可执行文件的源文件,降临达相应的目的你半大白?呵呵,举个例子好了,好比说某同享软体,它比力用户输入的注册码,要是用户输入的,跟它路程经过过程用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码不错了),那末它就会跳到注册乐成的处所去,不然就跳到堕落的处所去   大白过来了吧,咱们只要找到这个跳转指令,把它修改成咱们需要的"造型",如许,咱们是否就可认随心所欲了?   一,破解时经常使用的汇编指令如下,汇编较弱者可先强行违住,以后就可逐步理解了   cmp a,b //比力a与b   mov a,b //把b的值送给a,使a=b   ret //归回主步伐   nop //无效用,英文"no operation"的简写,意思是"do nothellong"(呆板码90) (解释:ultraedit打开编辑exe文件时瞅见90,等同于汇编语句nop)   call //挪用子步伐,子步伐以ret末端   je 或jz //若相等则跳(呆板码74 或0F84)   jne或jnz //若不相等则跳(呆板码75或0F85)   jmp //无前提跳(呆板码EB)   jb //若小于则跳   ja //若大于则跳   jg //若大于则跳   jge //若大于等于则跳   jl //若小于则跳   jle //若小于等于则跳   pop xx //xx出栈   push xx //xx压栈   更为具体的指令请查阅汇编册本   4.破解常见修改,参看表1   汇编指令修改 相应的呆板码修改(路程经过过程16进制编辑器实现)   jnz/jne->nop 75->90   jnz/jne -> jmp 75-> EB   jz/je->nop 74->90   jz/je -> jmp 74-> EB   jnz -> jz 75->74 或 0F 85 -> 0F 84   jz -> jnz 74->75 或 0F 84 -> 0F 85   jnz -> jz 75->74 或 0F 85 -> 0F 84   je-> jne 74->75 或 0F 84 -> 0F 85   表1

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧