ics2017pa1.RTFSC

编程入门 行业动态 更新时间:2024-10-10 12:24:38

ics2017pa1.RTFSC

ics2017pa1.RTFSC

Init_monitor的位置讲义中已经给出:

1

2

3

如果命令行个数比较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现,这个问题在 linux 中用 getopt 等函数可以优雅地解决。
.html

可以从讲义找到下面语句的位置debug目录下:

.html

再回到原来的ui_mainloop函数上

结合之前的使用,不难分析出能看出这是一个类似于图灵机的C语言实现:不断地修改eip指针(IP),从而从虚拟的内存中取出命令,并解析,从cmd_table中寻找匹配项目,如果是错误的命令就给出提示(“Unknow command”)。

我们再来看问题

首先在讲义中可以找到这条指令的位置

搜索这个函数



因为unit64是无符号数,所以-1被解释为最大的无符号数(推导见袁阿姨的书),所以指令将被执行最大次数(这是在is_batch_mode==true的情况下,也是就是一开始在monitor的解析函数下,输入了-b)

具体批处理是啥,我们就先不管了哈哈。

然后是前面的一个寄存器写作题目:

下面是上述的结构体定义


先来看一下报错的申明

是reg_w调用错误,查看结构体,发现函数(reg.h)定义如下

再来看报错的位置(reg.c)

好吧,我承认我什么都没看出来(希望会的大佬能指点我一下,谢谢)
那就老老实实按照改吧
“32位、16位、8位寄存器物理上并非独立的,所以将其包含在同一共用体中
32位寄存器eax,ebx,ecx,edx,esp,esi,edp,edi之间相互独立,所以包含在同一结构体中
gpr与eax,ebx,ecx,edx,esp,esi,edp,edi都表示寄存器,所以指向同一内存地址,包含在一个共用体中
eip与寄存器与通用寄存器相互独立,所以最终包含在同一结构体中”
回顾一下pa1的前面所说的i386寄存器

按照这个思路改一下

编译成功!

再回到之前我们看到的reg_test()上

比如说,就是随即生成数,扔到regsl和regw中,检验eax的低十六位是否等于ax中的值。
&0xffff的作用就是取低十六位,懒得证明了,就贴个图,袁阿姨也讲过:

再看下一题


让我们在该目录下搜索,发现了如下的数组定义:

然后我们再查看opcode_entry是什么

Opcode的中文是指令
我们还可以发现,在opcode数组中出现了一些该C文档中的宏定义:
![在这里插入图片描述](https://img-
blog.csdnimg/20191014184526507.png)

全局再搜索concat函数,得到:

好了,再纠结我也看不懂了,也不想补习C,等到要用到这个知识的时候再看吧。


来康康

然后我再monitot的debug目录下找到使用它的地方

以后估计可以用这个憨憨函数。
下面是Assert的定义:

下面是panic的定义:

他们的使用案例:

更多推荐

ics2017pa1.RTFSC

本文发布于:2024-03-04 07:00:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1708561.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:RTFSC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!