3

304号测试--main函数分析

 2 years ago
source link: https://sumsunsuns.github.io/2020/04/05/304(3)/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

这几天一直都在复习复试的内容,304号测试的进展有些慢。今天刚开始分析了一下main函数。


汇编指令:

1.nop指令

空操作指令指令格式:NOP

说明: NOP是英语“No Operation”的缩写。NOP无操作数,所以称为“空操作”。

执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W ;

读操作说明: 该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。

2.lea指令

lea, load effective address, 加载有效地址. 指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数, 简单说, 就是C语言中的”&”.

LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是将源操作数度[1000H]的偏移地址1000H送至AX;

MOV指令的功能是问传送数据,例如MOV AX,[1000H],作用是将1000H作为偏移地址,寻址找到回内存单元,将该内存单元中的数答据送至AX。


main函数伪代码分析:

enter description here


main函数汇编代码分析:

yenDk1mOiQwI2xR.pngYoKhpjubwmROI7F.png


首先对栈进行初始化操作,然后判断a1==2? 不成立就进行print操作,输出file流文档,然后出栈。 成立的话会调用一个signal函数,查询了一下signal(a1,a2),a1为要进行处理的信号,这里为2;a2为处理方式,一般来说处理方式一般有三种: SIG_IGN 忽略该信号 SIG_DFL 恢复对信号的系统默认处理 sighandler_t 执行handler函数

在此处就需要执行handler函数,使用handler处理信号量2. 令rdi=rbx+8,调用sub_CE0,然后进入循环。

今天分析了main函数具体过程,之后继续分析其他函数。


参考链接:

Nop指令的作用

lea指令!



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK