汇编语言
dream_uping
今天也是努力的一天
展开
-
readelf小尝试
代码如下:原创 2022-03-19 16:27:16 · 128 阅读 · 0 评论 -
PLT、POT、延迟绑定
学习地址:(是一位同学讲的,虽然青涩。但是,还能听明白!)【pwn】CTF学习:4、PLT表与GOT表 | 延迟绑定机制_哔哩哔哩_bilibiliGOTGOT表项中的数据才是函数最终的地址,而PLTPLT表中的数据又是GOTGOT表项的地址,就可以通过PLTPLT表跳转到GOTGOT表来得到函数真正的地址。PLT:PLTPLT表可以称为内部函数表。POT:GOTGOT表为全局函数表。延迟绑定:如下图,注意下图是第一次调用。第二次就顺畅啦:(已经完成换值啦,.原创 2022-03-17 21:34:24 · 585 阅读 · 0 评论 -
SSA是什么?
[WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment) - jlins - 博客园在编译器优化领域,数据结构的选择会直接影响程序优化的有效性。SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Control Dependence Graph一起被用来表示程序的数据流和控制流。大家都知道编译器是这样工作的:解析、优化,最后生成代码。中原创 2022-01-26 11:33:03 · 3445 阅读 · 0 评论 -
为什么,AX中存储的数据与我们日常理解相违背。
因为它是小端存储。又因为AX=AH+AL;即最低地址存放的最低字节:(低地址放在AX中的AL中。这与我们日常理解的相背。)一个用十六进制表示的32位数据:0x12345678,存放在存储字长是32位的存储单元中,按低字节到高字节的存储顺序为0x78、0x56、0x34和0x12。整个存储字从低字节到高字节读出的结果就是:0x78563412,为Intel x86 系列等采用。...原创 2022-01-23 13:58:44 · 386 阅读 · 0 评论 -
汇编语言中带点/小数点的是什么
汇编语言第四版中的是[bx+si+idata],表示一个内存单元,偏移地址是(bx)+(si)+idata;数学化表示:(ax)=((ds)*16+(bx)+(si)+idata).如下写法也是一个意思:mov ax,[bx+200+si]mov ax,[200+bx+si]mov ax,200[bx][si]mov ax,[bx].200[si]mov ax,[bx][si].200...原创 2022-01-23 13:50:29 · 734 阅读 · 0 评论 -
词法,语法,句法,语义
个人笔记,谨慎参考。原创 2022-01-02 15:44:20 · 697 阅读 · 0 评论 -
PE 文件格式 .text .data .idata .rsrc
好玩的:PE 文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中。 一个典型的 PE 文件中包含的节如下。 .text 由编译器产生,存放着二进制的机器代码,也是我们反汇编和调试的对象。 .data 初始化的数据块,如宏定义、全局变量、静态变量等。 .idata 可执行文件所使用的动态链接库等外来函数与文件的信息。 .rsrc 存放程序的资源,如图标、菜单等。...原创 2020-11-06 21:33:55 · 1719 阅读 · 5 评论 -
一个奇葩的标志寄存器 flag寄存器
注意:mov,push,pop等传送指令,执行结果对标志寄存器并无影响!ZF标志:结果为0,则ZF为1;不为0,ZF为0;(zeroflag)PF标志:如果1的个数为偶数,pf=1;如果为奇数,那么pf=0;SF标志:结果为负,则SF为1;结果非负数,SF为0CF标志:OF标志:监测点11.1:sub al,al al=0h ZF=1 PF=1 SF=0 al为0h,结果为0所以ZF为1代表真,有0个...原创 2020-08-21 21:39:21 · 644 阅读 · 4 评论 -
菜鸡记录-王爽-汇编语言-实验十(编写子程序-解决除法溢出)
题目:代码:assume cs:code,ss:stackstack segment dw 8 dup(0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,10h mov ax,4240H;低位 mov dx,000FH;高位 mov cx,0AH;除数 call divdw mov ax,4c00h int 21h divdw: push ax mov ax,d原创 2020-08-21 13:05:39 · 350 阅读 · 3 评论 -
菜鸡记录-王爽-汇编语言-实验十(编写子程序-显示字符串)
题目:代码:assume cs:code data segment db 'Welcome to masm!',0 data ends code segment start: mov dh,8 mov dl,3 mov cl,2 mov ax,data mov ds,ax mov si,0 call show_str原创 2020-08-20 17:41:02 · 525 阅读 · 2 评论 -
call ret指令的总结
ret:pop IPretf:pop ip;pop cscall标号:puship ;jmpnear ptr标号callfarptr标号:pushcs;puship;jmpfarptr标号call 16位reg:puship;jmp 16位regcallwordptr内存单元地址:puship;jmpwordptr内存单元地址mul乘法命令,相乘位数要相同:8位*8位=>16位16位*16位=>DX[存储高位] AX...原创 2020-08-20 10:39:03 · 268 阅读 · 1 评论 -
汇编语言(王爽 第三版) ret retf总结 以及检测点10.1
关键导读:ret对应的代码以及结果:assume cs:codesgstack segment db 16 dup(0)stack endscodesg segment mov ax,4c00h int 21hstart: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push ax mov bx,0 ret;执行之后就是将IP修改成为栈顶所对应的数据,再执行出栈(SP=SP+2)codesg endsend sta原创 2020-08-15 17:11:49 · 611 阅读 · 3 评论 -
王爽实验9.自己解读,代码注释很多!
实验9,PDF中的内容: 代码【注释较全面】: assume cs:code,ds:data,ss:stackdata segment db 'welcome to masm!';定义显示字符串,16个字节 db 02h,24h,71h;定义颜色data endsstack segment dw 8 dup(0);保留栈段空间,用来保存ax,bx,cxstack endscode segmentstart: mov ax,data mov ds,ax mo...原创 2020-08-14 14:18:39 · 1619 阅读 · 2 评论 -
王爽老师的汇编语言 实验8 jmp是如何实现跳转的
jmp short标号jmp near ptr标号jcxz标号loop标号书中给出的几种汇编指令,它们对I的修改是根据转移目的地址和转移起始地址之间的位移来进行的。在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移。所以就可以保证在内存的不同位置照样可以继续正确执行!而loop s 的机器码中包含的是转移的位移,就不存在这个问题了,因为,无论s 处的指令的实际地址是多少,loop指令的转移位移是不变的。...原创 2020-08-11 11:30:26 · 538 阅读 · 1 评论 -
王爽 汇编语言第三版 监测点9.2 监测点9.3 补全编程,利用jcxz指令,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,
补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。为了区分出是否成功写入。将dx提前赋值为9999!代码:assume cs:codecode segmentstart : mov ax,2000h mov ds,ax mov bx,0 s: mov cl,[bx] mov ch,0 jcxz ok inc bx jmp short s ok:mov dx,bx mov ax,4.原创 2020-08-09 18:26:06 · 2361 阅读 · 3 评论 -
汇编语言(王爽 第三版)检测点9.1 解决-a无法输入jmp dword ptr es:[1000h]
第一个:assume cs:code,ds:datadata segment db 0hdata endscode segmentstart:mov ax,data mov ds,ax mov bx,0 jmp word ptr [bx+1] mov ax,4c00h int 21hcode endsend start第二个:assume cs:code,ds:datadata segment dd 12345678hdata endscod原创 2020-08-08 11:33:07 · 999 阅读 · 2 评论 -
解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用
汇编语言-(第三版) 王爽-著 (实验七) 寻址方式在结构化数据访问中的应用是一个里程碑式的实验。数据处理,代码处理数据转存储。进行循环,以及存储被除数除以除数的数据。当然也有些许搞不懂的地方。留给以后学习吧!题目:g命令跳转:查看结果:代码如下:[mw_shl_code=asm,true]assume cs:codesg,ds:data,es:tabledata segment db '1975','1976','1977','1978','1979','1980','...原创 2020-08-07 16:33:31 · 886 阅读 · 1 评论 -
汇编语言实验七 学习小甲鱼实验代码
代码部分:assume cs:codesg,ds:data,es:tabledata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985''1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' dd 16,22,382,1356,2390,8000,16000,2448原创 2020-08-07 10:49:09 · 394 阅读 · 2 评论 -
汇编语言的div指令 ax dx bx
被除数32位,则除数应该是16位。被除数16位,则除数应该是8位。防止溢出发生!1.用到axdx两个通用寄存器来存储被除数。一般是因为被除数大于65535.使用ax存储低位数据,使用dx存储高位数据。示例:计算:100001/100100001=186A1H dx:1 ax:86a1AX存储商 dx存储余数结果:AX:03E8H DX=1H 换成10进制:AX:1000 DX=1验证正确!2.仅用到ax这一个通用寄存器...原创 2020-08-06 16:22:44 · 2668 阅读 · 2 评论 -
汇编语言中word ptr | byte ptr分别是什么意思
例如,下面的指令中,用word ptr指明了指令访问的内存单元是一个字单元。mov word ptr ds: [0],1inc word ptr [bx]inc word ptr ds: [o]add word ptr [bx],2下面的指令中,用byte ptr指明了指令访问的内存单元是一个字节单元。mov byte ptr ds: [0],1inc byte ptr [bx]inc byte ptr ds: [o]add byte ptr [bx],2...原创 2020-08-05 21:28:20 · 36339 阅读 · 1 评论 -
汇编语言reg和sreg bp的介绍
reg【寄存器】:ax bx bcx dx :四个通用寄存器ah al bh bl ch cl dh dl:将上面的四个通用寄存器分别拆成两份,就会出现这两个。sp:跟栈顶有关系bp:sidi:与bx作用类似。si一般作为源头di一般作为目的sreg【段寄存器】:ds:数据段ss:栈段cs:代码段es:扩展段bx bp si di这四个之间非比寻常的关系:8086CPU中,只有这四个可以用于[]之中进行内存单元的寻址。而且仅仅允许出现的组合:...原创 2020-08-04 21:31:41 · 4001 阅读 · 1 评论 -
汇编语言 循环让字符串中的字母变成大写
这个仅仅实现了变化前面的4个字母。但是关于出栈入栈的思想是很值得学习的!代码部分:assume cs:codesg,ds:datasg,ss:stacksgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdatasg segment db '1. file ' db '2. Edit ' db '3. search ' db '4. view 'datasg ends原创 2020-08-04 17:29:16 · 882 阅读 · 0 评论 -
汇编语言 利用and运算 将字符串中的某个字母变成大写
待运行代码:assume cs:codesg,ds:datasgdatasg segment db '1. file ' db '2. Edit ' db '3. search ' db '4. view ' db '5. options ' db '6. help 'datasg endscodesg segmentf: mov ax,datasg mov ds,ax mov bx,0原创 2020-08-04 16:11:17 · 404 阅读 · 1 评论 -
对于如下定义的段:name segment如果段中数据占N个字节,则程序加载之后,该段实际占有的空间为
对于如下定义的段:name segment如果段中数据占N个字节,则程序加载之后,该段实际占有的空间为原创 2020-08-01 21:52:17 · 1823 阅读 · 6 评论 -
为啥同一个程序,单步执行和debug执行出现的结果不一样呢?
代码:assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0 start:mov ax,cs mov ss,ax mov sp,30h mov ax,0 mov ds,ax mov bx,0 mov cx,8 s0: push [bx] pop cs:[bx] add bx..原创 2020-08-01 16:12:38 · 1057 阅读 · 5 评论 -
汇编语言 第3版 王爽 检测点6.1自己的答案
第一个:assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart:mov ax,0 mov ds,ax mov bx,0 mov cx,8 s0: mov ax,[bx] mov cs:[bx],ax add bx,2 loop s0 mov ax,4c00h int 21hcodesg endsend start第二原创 2020-08-01 16:06:16 · 863 阅读 · 6 评论 -
注意 汇编源程序中,数据不能以字母开头,所以要在数据前面加上0
注意 汇编源程序中,数据不能以字母开头,所以要在数据前面加上0。真是忽然明白呀。这是因为编译器不理解以字母开头的东西的。【加上0是没有什么意义的,所以加上0也不会影响程序执行!】...原创 2020-07-28 21:43:55 · 919 阅读 · 0 评论 -
EXE文件中的程序的加载过程 SA是什么呢?PSP是什么?
王爽老师汇编语言书里面的截图:SA的介绍:无论是书本,还是搞这个的老哥们。都意思如下:只需要知道第一步,程序地址=SA * 16 + 256,即可。PSP是什么呢?书上也说啦。就是取出段内存区的前面256个字节。用来与被加载程序通信。虽然是废话,但是在此作为一个烂笔头的存在好啦~关于程序物理地址:SA+10H:0出现过程:首先PSP的物理地址:SA*16+0;再补上预留给PSP的256个字节(即是:100H)。故而: (SA*16+0)+256...原创 2020-07-27 16:22:06 · 1029 阅读 · 5 评论 -
Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。
为什么会这样呢?要想彻底说清楚这里面的来龙去脉,在这里还为时过早,因为这涉及我们在以后的课程中要深入研究的内容:中断机制,它是我们后半部分课程中的一个主题。现在我们只要知道这一点就可以了:Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。图片:...原创 2020-07-16 20:23:21 · 669 阅读 · 6 评论 -
汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点3.2
题目(1) :补全下面的程序,使其可以将10000H- ~1000FH 中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。解答:push为入栈。故而,将数据段偏移地址中的数据以入栈的方式进入SS:SP(2000:10)这个指向栈顶的数据即可!三个空:mov ax,2000mov ss,axmov sp,10题目(2) :(2) 补全下面的程序,使其可以将10000H~1000FH 中的8个字,逆.原创 2020-07-12 21:28:19 · 2513 阅读 · 1 评论 -
汇编语言 执行push和执行pop区别 栈顶的变化范围
执行pop时,先读取SS:SP处的数据,后改变SP。执行push时,先改变SP,后向SS:SP处传送。原创 2020-07-12 11:37:50 · 1258 阅读 · 1 评论 -
小甲鱼关于push,pop指令的一个编程题
编程:(1)将10000H~ 1000FH这段空间当作栈,初始状态是空的;(2)设置AX=001AH,BX=001BH ;(3)将AX、BX中的数据入栈;(4)然后将AX、BX清零;(5)从栈中恢复AX、BX原来的内容。设计命令:movax,1000 mov ss,ax[段地址寄存器不能直接接触数据,必须通过通用寄存器来接触数据] mov sp 10[这个我遗忘啦,初始化栈顶操作 不过没影响效果] movax,1a mov bx,1b push ax push bx mo...原创 2020-07-12 11:33:56 · 4326 阅读 · 1 评论 -
汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点3.1
mov ax,1mov ds,axmov ax,[1000] AX = 2662hmov bx,[1001] BX = E626hmov ax,bx AX = E626hmov ax,[0000] AX = 2662hmov bx,[0002] BX = D6E6hadd ax,bx AX = FD48hadd ax,[0004] AX = 2C14hmov ax,0 AX = 0000hmov al,[0002] AX = 00E6hm...原创 2020-07-10 13:33:53 · 1597 阅读 · 5 评论 -
小甲鱼-累加数据段中的前3个字型数据【不对的话,请指教!】
1,我们将123B0H~ 123BAH的内存单元定义为数据段,我们现在要累加这个数据段中的前3个单元中的数据。单元就是字节啦!步骤如下:进行debug调试:先输入命令:-t进行单步执行2,字型数据。就是字(一般是等于两个字节的那种!)就是将al改变为ax即可!还有偏移地址也会变化!!!设置:-t:进行单步执行!...原创 2020-07-09 22:05:35 · 575 阅读 · 4 评论 -
汇编语言学习-寄存器(内存访问)
内存中字的存储:两个16进制位是一个字节!0号单元是低地址单元,1号单元是高地址单元。0地址单元中存放的字节型数据是多少?注意区别:“0地址单元”指向的就是:20H0地址字单元中存放的字型数据是多少?注意区别:“0地址字单元”指向的就是:4E20H结论:任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。DS和address:CPU要读取一个内存单元的时候,必须先给出这个原创 2020-07-07 21:57:23 · 729 阅读 · 6 评论 -
哔哩哔哩小甲鱼 汇编语言 记录一下 寄存器(内存访问)两个小实验
第一个实验:打开win10中的模拟器。1,,2,2,3,通过-t命令进行单步执行。执行完所有已经输入的程序就可以看到最后的AX BX CX寄存器内容。最后的AX BX CX:AX=1123 BX=8833 CX=8833第二个实验:1,思想。赋值(通过-e指令操作),确定程序开始地址(-a指定CS:IP然后回车就可以开始指定程序)。然后查看一下,-r看看是不是写入成功啦。[十进制:11316转换为16进制:2c34]subbx,[...原创 2020-07-07 21:56:21 · 490 阅读 · 4 评论 -
Debug常用命令 精简版本
参考:https://blog.csdn.net/ASJBFJSB/article/details/81905668https://jingyan.baidu.com/article/a65957f433f60924e67f9b07.html正文:-r:查看寄存器中的内容-t:单步执行cpu执行一条机器指令(CS:IP指向的指令)-d:查看内存的内容-e 1000:0:改写内存中的内容-u:将指定内存块的机器指令转化为汇编指令[稍微人性化点!]-a:.原创 2020-07-07 15:36:18 · 204 阅读 · 4 评论 -
win10环境下 运行debug程序
百度网盘:链接:https://pan.baidu.com/s/1y6omgW6fI-gT3Dp-0hutOg 提取码:iw4lCSDN0积分下载:操作视频地址:操作视频对应的内容:学习地址:https://www.cnblogs.com/wulimax/archive/2019/04/17/10723688.htmlwin10环境下运行debug程序1,准备好软件 DOSBox0.74-3-win32-installer.exe debug.exe2,安装,一直...原创 2020-06-23 13:34:55 · 815 阅读 · 7 评论 -
汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点2.3
mov ax,bx sub ax,ax jmp ax 第一次,就是MOV指令就是移动指令。对应的操作:AX=BX 指向下一个第二次,就是SUB指令 就是减去指令。对应的操作:AX=AX-AX=0 指向下一个第三次,就是JMP指令 就是跳转指令 JMP 指向下一个第四次,直接执行 修改IP!关于JMP的介绍:CS,IP不能通过MOV指令来改变他们的内容,不过可以通过非条件软件指令JMP...原创 2020-06-22 11:03:22 · 657 阅读 · 5 评论 -
组原,汇编语言关于代码段的定义
哔哩哔哩小甲鱼,视频中关于代码段的定义:对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段可以将长度为N(N<=64KB)的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。...原创 2020-06-21 21:32:01 · 1646 阅读 · 3 评论