43、深入探索汇编与C交互及文件I/O操作

汇编与C交互及文件I/O详解

深入探索汇编与C交互及文件I/O操作

1. 灵活的CALL指令

在汇编编程中,CALL指令有着独特的用法。以下代码片段中的两个CALL指令都是合法且等效的:

mov ebx, pull8 ; 将标签pull8代表的地址加载到EBX
call pull8 ; 调用pull8代表的地址
call ebx ; 调用EBX中存储的地址

这种方式能让我们将过程调用当作参数处理。例如在randtest里,把很多代码提取到名为puller的过程中,然后针对不同大小的随机数多次调用puller。通过将正确的随机数过程地址加载到EDI,传递给puller:

; 创建并显示一个8位随机值数组
mov edi,pull8 ; 将随机数子程序的地址复制到edi
call puller ; 按照[pulls]中的要求提取尽可能多的数字

在puller过程中,代码以如下方式调用所需的随机数过程:

puller:
mov esi,dword [pulls] ; 将提取计数放入ESI
.grab: dec esi ; 递减ESI中的计数器
call edi ; 提取值;结果返回在EAX中
mov [stash+esi*4],eax ; 将随机值存储在数组中
cmp esi,0 ; 查看是否已经提取足够的数字
jne .grab ; 如果ESI不为0,则继续
ret ; 否则返回

调用寄存器中的地址能极大地增强代码的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值