汇编add byte ptr ds:[eax],al是什么意思
数据处理有两个基本问题:
(1) 处理的数据在什么地方?
(2) 要处理的数据有多长?
这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机就无法工作.
在这里,你是要加AL寄存器中的内容加到内存存储单元中去,但计算机不知道要用多大的空间来存储它,所以要加上 byte ptr ,明确告诉计算机我们要用一个字节的空间来存放它!
[eax]就是把eax中存放的数据作为一个偏移地址EA
综合起来说,楼上的回答是正确的!!
救助 汇编中 add byte ptr ds:[eax+1],al是什么意思
【使用工具】 OllyDbg,PEid,LoadPE
【破解平台】 Win2K+SP4
【软件名称】 大嘴日语 5.0
【软件简介】 大嘴日语 融合了【逆向学习法】和【疯狂英语】这两种有效的英语学习方法的精髓,
并加以创新,集日语的【听、说、读、写、背、查】功能于一身, 解决了困扰国人的学习日语难的问题。
是一款集日语口语、日语背单词综合教育软件。
【加壳方式】 EXEStealth 2.75a + ASPack + UPX
开始调试前,最好把OLLYDBG.EXE改名为CMD.EXE因为壳里面有些代码是检测父进程的,如下:
0123CCA0 813F 434D442E cmp dword ptr ds:[edi],2E444D43 ; [EDI]是检测父程序名字, 0x43,0x4D,0x44,0x2E的ASCII字符是"CMD."
0123CCA6 74 3B je short BmJapane.0123CCE3 ; 父程序不是CMD.EXE,就不跳,接着就OVER了 修改ZF寄存器为1
0123CCA8 90 nop
0123CCA9 90 nop
0123CCAA 90 nop
0123CCAB 90 nop
0123CCAC 83EE 0C sub esi,0C
0123CCAF AD lods dword ptr ds:[esi]
0123CCB0 0306 add eax,dword ptr ds:[esi]
0123CCB2 0346 04 add eax,dword ptr ds:[esi+4]
0123CCB5 8BD8 mov ebx,eax
0123CCB7 8DB5 A1194100 lea esi,dword ptr ss:[ebp+4119A1]
0123CCBD AD lods dword ptr ds:[esi]
0123CCBE 0BC0 or eax,eax
0123CCC0 74 0E je short BmJapane.0123CCD0
0123CCC2 90 nop
0123CCC3 90 nop
0123CCC4 90 nop
0123CCC5 90 nop
0123CCC6 2BC3 sub eax,ebx
0123CCC8 74 19 je short BmJapane.0123CCE3
0123CCCA 90 nop
0123CCCB 90 nop
0123CCCC 90 nop
0123CCCD 90 nop
0123CCCE ^ EB ED jmp short BmJapane.0123CCBD
0123CCD0 B8 90010000 mov eax,190
0123CCD5 E8 C6EFFFFF call BmJapane.0123BCA0
0123CCDA 8DBD 69324000 lea edi,dword ptr ss:[ebp+403269]
0123CCE0 03F8 add edi,eax
0123CCE2 AB stos dword ptr es:[edi] ; 若是前面不跳的话,到这里调试器就会无法处理异常,进程退出
0123CCE3 FFB5 30FE4000 push dword ptr ss:[ebp+40FE30] ; 跳到这里
0123CCE9 50 push eax
另把同目录下的Config.ini文件备份一个,当出来说文件不完整要重新安装程序的时候
把备份文件覆盖了Config文件就行了;
关于汇编的重定位语句add ebx,dword ptr ds:[ebp]
不知道你说的“重定位”的上下文是什么就这句而言,作用就是把ebp地址里的值加到ebx里相当于ebx = ebx + [ebp]ebp里存一个地址,[ebp]是这个地址里的值一个加法而已//////////看来是为下面的 call dword ptr ss:[ebx] 做准备,上一句add ebx,dword ptr ds:[ebp]计算出调用的地址,然后下句call调用/////// 和上次的add ebx,dword ptr ds:[ebp]效果完全一样,只不过一个操作数换成了esp就好比x = 1 + 2x = 1 + 3一样,执行的都是加法这里的[esp]的值其实就是上面那句push eax里eax的值,所以相当于add ebx, eax。
关于汇编的重定位语句add ebx,dword ptr ds:[ebp]
不知道你说的“重定位”的上下文是什么
就这句而言,作用就是把ebp地址里的值加到ebx里
相当于
ebx = ebx + [ebp]
ebp里存一个地址,[ebp]是这个地址里的值
一个加法而已
//////////
看来是为下面的 call dword ptr ss:[ebx] 做准备,上一句add ebx,dword ptr ds:[ebp]计算出调用的地址,然后下句call调用
/////// 和上次的add ebx,dword ptr ds:[ebp]效果完全一样,只不过一个操作数换成了esp
就好比
x = 1 + 2
x = 1 + 3一样,执行的都是加法
这里的[esp]的值其实就是上面那句push eax里eax的值,所以相当于add ebx, eax
add byte ptr ds:[esi],dl 什么意思
ds:[esi]这里的意思是 ds 表示是数据段
esi就是寄存器的值 [esi]表示是地址的值,其实你可以把esi看成是指针。。(说多了)
这个话的意思是数据段里地址是esi的地址里面的内容
byte ptr 这个是个伪指令 ,你刚才取的值是字(word)类型的 这个指令的 作用是把这个字取他的高位变成字节
(byte)
下面
add byte ptr ds:[esi],dl
意思就简单了 把那个地址的按字节取的值加上dl 给那个地址空间 哈哈帅
汇编中ADD BYTE PTR DS:[EDI],AL什么意思啊
将DS:[EDI]所指向的一个字节与AL的值相加,结果在DS:[EDI]
这段代码没有什么问题,不过不同的汇编器对语法可能有所不同,不知道你是处于什么环境有错的?下面我说两种可能:
1、如果你用的是16位汇编器的话,它是不支持EDI这个寄存器的,这时只能使用16位寄存器如DI等
2、如果你是在DEBUG环境中使用,除了第一条外,DEBUG还不支持段前缀的这种用法,此时应改为
ds:
ADD BYTE PTR [DI],AL
懂汇编的看看 修改特征码
特征码00007496 C32am:ADD [EAX],EAX
可以把ADD改成ADC
吃不饱也撑着 的方法已经过时了 就是能正常上线 也不能免杀了
如果你很感兴趣 我可以给你最常用、有效的五种方法
方法一:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.
2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能否正常使用.
方法二:修改字符串大小写法
1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.
方法三:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.比如JN,JNE 换成JMP等.
方法四:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行
方法五:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
2.适用范围:没有什么条件,是通用的改法
转载请注明出处51数据库 » adddwordptrds:[ea