自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(196)
  • 收藏
  • 关注

原创 wireshark抓包tcp为何没有四次挥手 而是三次挥手

在wireshark上抓包,使用telnet直接连接baidu的ip,端口使用www,p4@u1804:~$ ping www.baidu.comPING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=1 ttl=128 time=37.8 ms64 bytes from 183.232.231.174 (183.232

2021-11-24 20:39:22 5297 2

原创 Linux Ubuntu 设置脚本开机启动

主要参考下面这个博客ubuntu18开机启动脚本但是要注意,有的ubuntu里面并不存在这个目录,在一开始的vim /etc/systemd/system/rc-local.service这一步就会失败。比如我的系统。最后我使用find在/lib/systemd/system下找到了rc-local.service。之后将这个文件复制到/etc/systemd/system下,再继续进行链接里的操作,才成功的。完整流程如下直接编辑/复制后编辑文件sudo cp /lib/systemd

2021-09-26 22:47:48 348

原创 IEEE模板解决找不到引用文献错误 Citation ‘×××ב on page x undefined.

IEEE模板解决找不到引用文献错误 Citation ‘×××ב on page x undefined.使用官网下载的IEEEtrans模板,bib文件格式正确,发现使用winedt编译就正常,但是使用vscode+texlive编译器编译出来一个参考文献都没有,每个参考文献的位置处都显示Citation ‘×××ב on page x undefined. 网上说修改配置文件,加上两次编译pdflatex和bibtex啥的,都加了也没用,见https://blog.csdn.net/qq_3839

2021-09-06 23:31:37 2167 1

原创 MIT_6.828_lab2_总结

简而言之,使用pageinfo结构体映射物理页,使用pages数组保存页结构体,pagefreelist保存空闲页结构体,使用pa2page和page2pa实现物理页和页结构体的转换,使用二级页表机制进行物理地址与虚拟地址的转换,使用PDX、PTX等宏(其实就是简单的移位操作)实现虚拟地址查页表,各级页表的页表项结构相同,都是前20位物理页索引,后12位标志位。更详细的页表项、结构说明等,参见lab2_exercise1讲解。手动实现了10个函数boot_alloc()static void *

2021-07-31 17:30:47 450

原创 MIT_6.828_lab2_exercise5_讲解

exercise5要求补充mem_init()完全按照提示来就行了。// Set up a two-level page table:// kern_pgdir is its linear (virtual) address of the root//// This function only sets up the kernel part of the address space// (ie. addresses >= UTOP). The user part of the ad

2021-07-31 15:56:28 215

原创 MIT_6.828_lab2_exercise2_3_4_讲解

exercise2、3都是看文档,和调试命令不要不认真看文档!不然后面肯定会有做不下去的地方,逼着你再从头开始把文档看一遍!比如exercise2就是详细复习一下intel 80386处理器的页表机制具体实现,虽然以前学了,但是也一定要再认真看一下,不然写不下去的!exercise4要完成下面这几个函数,在kern/pmap.c中 pgdir_walk() boot_map_region() page_lookup() page_rem

2021-07-31 15:55:46 307

原创 MIT_6.828_lab2_exercise1_讲解

这一部分任务就是完成5个函数boot_alloc()mem_init()page_init()page_alloc()page_free()做之前,要先分析一下内存分布和地址转换的内容。这些内容都是我做的时候边做边摸索的,遇到做不下去,就观察一下查一查;如果不明白下面这些的话,这几个函数是完不成的。如果想直接看答案,这部分可以跳过。内存分布下面是lab1里面就介绍了的内存分布。+------------------+ <- 0xFFFFFFFF (4GB)| 32-

2021-07-23 10:59:03 424 2

原创 mit 6.828 lab1_exercise12_讲解

好难啊,去年做的时候就很难,难到直接不知道怎么出来的,现在能搞出来了。。。。。。Exercise 12. Modify your stack backtrace function to display, for each eip, the function name, source file name, and line number corresponding to that eip.In debuginfo_eip, where do __STAB_* come from? This questi

2021-07-18 18:16:57 952 1

原创 mit_6.828_lab1_exercise11_讲解

test_backtrace反汇编后长这样test_backtrace(int x){f0100040: 55 push %ebpf0100041: 89 e5 mov %esp,%ebpf0100043: 53 push %ebxf0100044: 83 ec 0c sub $0xc,%espf0100047: 8b 5d 08

2021-07-15 16:19:15 428

原创 pdf复制去掉换行符

我突然间发现,pdf复制后去掉换行符很简单,只需要直接将复制到的文本ctrl v粘贴到浏览器搜索框中,之后再ctrl a全选,ctrl c复制出来,就没有换行符了。我用的chrome。

2021-07-15 16:18:34 1630 4

原创 函数调用栈详解

前几天忙里偷闲重做6.828,发现在lab 1 exercise 11卡住了,才发现之前觉得很熟了的函数调用栈已经因为太久没接触忘了,一年没有用过这些东西了。看了几篇博客,发现理解还是不够深入,只能自己再手动测一下试一试了。写了一个C文件,叫temp.c#include <stdio.h>int double_add_int(int a, int b) { int c = a; int d = b; int e = a + b + c + d; retu

2021-07-09 11:08:09 1143 3

原创 include errors detected cannot open source file glib.h glib.h glibconfig.h no such file or directory

最近写网安作业,要用到libvmi,发现打开源码缺失库glib。cannot open source file glib.h发现要先安装glib。sudo apt-get install libglib2.0-dev之后使用g++ -v -E -x c++ -会输出g++ 需要include的所有路径。如下。wang-an@ubuntu:~/libvmi/examples$ g++ -v -E -x c++ -Using built-in specs.COLLECT_GCC=g++

2021-07-04 16:18:55 1317

原创 配置6.828时遇到的makefile错误

做6.828时,配置qemu,碰到了一个makefile错误,去年配没遇到过。qemu安装过程见课程官网tools安装说明。当我从官网git到qemu源码包之后,./config完,下一步就是make了,但是这时候报错了。make[1]: *** No rule to make target '/home/yiichan/qemu/exec.c', needed by 'exec.o'. Stop.Makefile:173: recipe for target 'subdir-i386-softm

2021-06-08 18:53:48 643

原创 P4官方实验4. Explicit congestion notification

Explicit congestion notification显式拥塞通知。ECN支持端到端的网络拥塞通知来防止丢包。如果一个终端支持ECN,它会将ipv4.ecn的值设为1或2.对这样的包,每一个switch可能改变它的值为3,如果队列长度大于一个阈值。接受者会将值复制给发送者,并且发送者会减慢发送速度。在这个实验中,我们要完成:把ipv包头中的8bits tos域改成6 bits diffserv和2 bits ecn在出路由中对比当前的queue length和ECN_THRESH

2021-03-13 09:41:03 1077

原创 P4官方实验3.P4Runtime

Implementing a Control Plane using P4Runtime使用P4Runtime来发送流表项到交换机,而不是使用交换机命令行接口。在mycontroller.py中,我们定义明确的流表、键、动作的名字,我们使用P4Info_helper来将这些名字转化成IDs,P4Runtime需要这些IDs来执行。任何表、键、动作的改变都必须在表项中被反映。代码解析头文件首先是引入了一堆库,和需要用到的p4runtime_lib。#!/usr/bin/env python2i

2021-03-08 12:58:42 2627 2

原创 P4官方实验1. Implementing Basic Forwarding

P4官方实验1 实现基础转发介绍交换机要实现接下来的功能更新元和目的mac减少IP头的TTL将包转发到合适的端口我们的P4程序使用V1Model结构写成,该结构被P4.org上的bmv2软件交换机实现。作者建议我们阅读v1model.p4文件。我们需要使用mininet,这是斯坦福大学的一个开源项目,用于生成一个虚拟网络,包括虚拟链路、主机、交换机、路由器等,用于实验测试。第一步:运行不完全的起始代码在basic目录下make源代码make run之后使用h1 ping h2,肯

2021-03-05 23:26:48 1595 2

原创 P4_Basic_Forwarding

P4交换机:实现基本转发P4语言项目地址 https://github.com/p4lang在github这个项目最开始的说明里,有两种配置P4的方法,一种是自己配,我没配出来,许多apt-get文件无法下载更新;另一种是直接用斯坦福的一个现成的虚拟机,下载镜像后导入virtualbox。推荐使用第二种方法,就是使用现成虚拟机这个方法。不好好看readme,让我在方法一花了太多时间,没有发现这是二选一的,只是在闷着头做。虚拟机导入后,home目录下应该有现成的tutorials文件夹(我忘了是

2021-02-01 23:12:07 528

原创 C++ Primer 5th 2.3 复合类型

2.3.1 引用引用就是一个对象的别名,由于被引用的一定要是一个对象,而引用本身不是对象,所以不能定义引用的引用。引用一定要在定义时就指定被引用对象。引用的类型和被引用对象的类型一定要是相同的。int i = 1024;int &r = i;double &r1 = i; //错误,i为int,而r1为double型,不相同,不对应2.3.2 指针空指针对于空指针,有至少三种定义方法。int *p = NULL; //NULL是预编译变量,在预编译时会被替换成0,等价

2021-01-12 20:10:31 159

原创 为什么.bashrc中的alias别名不能用于脚本中和Makefile

下周高级计算机网络课要复现并且汇报A会文章,成功复现就能拿A。我选了篇sketch的,sliding sketch, SIGKDD 20’。没想到编译发现一定要stdc++11,一堆错误。挨个改Makefile确实可以,但是太费劲,所以想在.bashrc里面加个alias别名,g++='g++ -std=c++11'没想到一点用都没有。所以还是改了回去。使用自己写的脚本测试发现,alias在shell脚本中用不了,发现因为如下原因。为什么alias在shell脚本里用不了简要说,是因为shell

2020-11-12 01:58:20 1503

原创 CSAPP Lab 3 Attack Lab phase1~3

Lab 3 Attack labphase 1第一个很简单,只需要用x命令查看栈内容,定位到ret的返回位置,再用自己输入的缓冲区溢出数据覆盖就行了。计算好需要输入的字节长度,将touch1函数的首地址恰好覆盖原先的栈顶元素,这样ret就会返回到touch1函数,而不是返回到正常的test函数。需要注意的是,由于转移目标地址输入到栈中是ascii码形式保存的,所以如果地址是一些难以输入的ascii码怎么办?官方给了一个转换小程序hex2raw,能够将两位16进制表示的ascii码转换成字符输入,这样就

2020-08-04 20:39:05 817

原创 CSAPP Lab 2 Binary Bomb 二进制炸弹

Lab 2 Binary Bomb(二进制炸弹)传说中的二进制炸弹实验,广为流传,学csapp的人对这个lab耳熟能详。实验内容是通过反汇编一个linux可执行文件,得到它的汇编格式代码,通过分析这个汇编代码,得出解除炸弹需要输入的字符串。输入每个炸弹对应的正确字符串,就能解除这个炸弹,一共六个炸弹。具体描述是,有6个不同的样例,对每个样例,只有输入正确的字符串才能成功通过,输入错误的字符串就会失败(表现为这个炸弹爆炸,扣作业分)。通过反汇编得到汇编代码,分析能够得到正确字符串,运行时输入即可。初始

2020-07-17 10:30:39 2346

原创 GDB汇编调试命令

GDB汇编调试命令之前学xv6时用到的GDB,在这里整理了一份常用gdb命令,免得自己以后还得去网上查那些对错不论的博客。1. info r 显示当前的寄存器值对于标志寄存器,见下图。其实输入上面命令,eflags后面会直接显示当前为1的寄存器名称。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aik6OLGV-1594872387491)(/home/yichuan/桌面/eflags.png)]2. 要查看寄存器的值,很简单,可以使用如下命令:info r

2020-07-16 12:07:42 1299

原创 第8章 检测点

检测点8.3解答:1 . 移动之后是0010 1010 1001 0101,即0x2a952.a. jmp label_proc2.b. jmp bx2.c. jmp [bx]2.d. jmp 0xf000:0x00022.e. jmp far [0x80]2.f. jmp far [es:bx+di+0x08]本章习题1 . 真的不会,调了半天没调出来2 . 去掉38、39行时,如果实际代码长度小于512字节,就是说只使用了0号扇区,则接下来51、52行会读下一个逻辑

2020-06-25 20:53:21 199

原创 第8章 硬盘和显卡的访问与控制

第八章 硬盘和显卡的访问与控制8.2 用户程序的结构处理器对指令和数据的获取一律按“段地址:偏移地址“进行,相对应地,一个规范的程序应该包括代码段、数据段、附加段和栈段。段定义NASM编译器使用汇编指令SECTION或者SEGMENT来定义段,格式如下SECTION 段名SEGMENT 段名对齐命令alignIntel处理器要求段在内存中的起始物理地址起码是16字节对齐的,意思是,必须是16的倍数,或者说物理地址必须能被16整除。这在装载时会被操作系统自动装载到对齐后的地址。但是,相应的,

2020-06-25 20:51:26 488

原创 Bochs调试

要打开的是bochsdbg.exe。首先在起始页面设置一些基本数据,之后进入调试窗口。b 0x7c00 设置断点c continue,即为不断执行,到断点或终点停下r 显示通用寄存器内容sreg 显示段寄存器内容xp 显示指定内存地址处的内容,默认显示一个双字,可以指定显示的双字个数。如xp/2 0xb8000 ,会从0xb8000起显示两个双字q 退出调试过程u/n 0xXXXX 反汇编指令,用于对0xXXXX地址后的n条指令进行反汇编,得到这n条

2020-06-25 20:50:56 581

原创 第7章 比高斯更快的计算

第七章 比高斯更快的计算这一章的主题是汇编计算累加和,以及寻址方式的学习。and、or指令and是按位与,or是按位或。两者的目的操作数都必须是8位或者16位的内存单元或者通用寄存器,源操作数必须是与目的操作数同宽度的内存单元、通用寄存器或者立即数。注意,与其他指令一样,源操作数和目的操作数不能都为内存单元。两者对标志寄存器的影响相同:OF和CF被清零,SF、ZF、PF依计算结果而定,AF位的状态未定义。栈计算机中的栈段一般是从高地址向低地址生长,也就是说压栈减地址,出栈加地址。在这里,我们选

2020-06-15 23:34:08 299

原创 第6章 相同的功能 不同的代码

第六章 相同的功能 不同的代码上一章我们分别将每一个显示字符打入显示缓冲区,这样太麻烦,每次修改显示不同内容得重写,所以我们这一章设一个专门存放字符串的数据区,当要显示时,再用指令统一取出来。补课:除法指令div8086处理器除法指令有两种类型。类型一:16位数除以8位数。被除数放置于ax,除数可以由8位通用寄存器或内存单元提供。商在寄存器al中,余数在寄存器ah中。div cl ;除以cx寄存器低位的8位cldiv byte [0x0023] ;除以0x0023处的1字节数据类型

2020-06-15 23:33:38 437

原创 MIT 6.828 Lab1: PC Bootstrap and GCC Calling Conventions

Lab 1: Booting a PCPart 1: PC BootstrapGetting started with x86 assembly x86汇编入门汇编语言有两种格式,一种是AT&T格式,一种是Intel格式,两种格式不同。Simulating the x86 模拟x86处理器The PC’s Physical Address Space PC的物理内存空间The ...

2020-04-26 16:37:12 351

原创 MIT 6.828 Lab1 exercise12

exercise 1.12这个实验说实话我没有理解,只能照猫画虎的做前几问,最后一问实在不会做。要求:在函数debuginfo_eip中,__STAB_*来自哪里?通过插入对stab_binsearch的调用来完成debuginfo_eip,使之能够找到一个地址的行号。在内核中添加一条backtrace命令,并且修改你的mon_backtrace函数,使之能够调用debuginfo_e......

2020-04-26 16:27:59 595 1

原创 MIT 6.828 Lab1 exercise11

exercise1.11对我这种汇编很差的人来说,这个练习也太难了点吧,一卡卡了我两天半。。。。先是看那个read_ebp()“会很有用”,于是去研究了内联汇编格式,一直看不懂,花了一天才知道这个内联汇编函数是在做什么;之后又去搜汇编函数调用栈过程,才知道栈中那一条条指令如何算,如何看;然后又复习了一下gdb汇编的单步调试命令,用这个一步步调,跟踪栈的变化,才理解了这个五层调用函数栈的变化过程;...

2020-04-24 15:38:22 394

原创 MIT 6.828 Lab1 exercise10

exercise 1.10要求:在obj/kern/kernel.asm中找到test_backtrace函数,设置一个断点,检查内核启动后每次该函数被调用时发生了什么。多少个32位字在每次嵌套调用test_backtrace时被压入栈?这些被压栈的字是什么?解答:查询被调用过程,最后指向了一个C文件,lab/kern/init.c 其中有该函数的代码。test_backtrace(in...

2020-04-21 00:09:28 409

原创 MIT 6.828 Lab1 exercise8

exercise 1.8要求:补充printfmt.c line 208处的代码,让程序能够打印出八进制形式数。解释printf.c和console.c之间的接口,特别是,console提供了什么函数?这个函数是怎样被printf.c使用的?解释下面这段来自console.c的代码片段。if (crt_pos >= CRT_SIZE) { int i; memmove(cr...

2020-04-20 22:51:36 532

原创 MIT 6.828 Lab1 exercise9

exercise 1.9要求:找出内核初始化内核栈的地方(代码),和内核栈加载到主存的位置。内核是如何为栈保存这个区域的?这个栈指针初始化指向的保存区域的终点是哪里?解答:打开路径为lab/obj/kernel.asm的文件,这是内核的反汇编文件,其中的第58行指出了对esp的赋值,f0100034: bc 00 00 11 f0 mov $0xf0110000,%e...

2020-04-20 22:50:40 293

原创 MIT 6.828 Lab1 exercise7

exercise 1.7要求:使用QEMU和GDB追踪JOS内核并停在 movl %eax,%cr0 处。检查0x00100000和0xf0100000处的值。之后单步运行这条指令,再重新检查这两处的值。确保你知道发生了什么。在新的映射机制建立后,如果映射没有就位,哪一条指令会是第一条无法工作的指令?注释掉 movl %eax,%cr0 ,看看你是不是正确的。注意实验文档上所说的,硬件实现...

2020-04-19 17:57:00 398

原创 MIT 6.828 Lab1 exercise6

exercise 1.6要求:在BIOS启动boot loader和进入内核时,地址0x00100000处的连续8个字有什么不同?为什么?回答这个问题不需要运行qemu,请思考这个问题。(gdb) x/8x 0x1000000x100000: 0x00000000 0x00000000 0x00000000 0x000000000x100010...

2020-04-19 00:56:03 360

原创 MIT 6.828 Lab1 exercise5

exercise 1.5要求:如果链接地址是错的,追踪boot loader代码会做什么。将boot/MakeFrag文件中的链接地址改成一个错误值,重新编译,追踪boot loader执行,看看会发生什么。不要忘记做完后将正确的链接地址改回去。我把链接地址改成了0x7cc0,结过qemu窗口出现了如下错误信息。qemu-system-i386 -drive file=obj/kern/k...

2020-04-19 00:55:33 578 3

原创 MIT 6.828 Lab1 exercise4

exercise 1.4作业写到现在,把这门课和coursera上吴恩达的机器学习放在一起,与国内的课程对比,发现国外的课程和国内相比,有很大差别。差别如下:国内重课堂讲授,国外课程讲授很少,只有短短的录播课或者想这门课直接没有视频,关键在于课堂外文章资料的自行阅读和研究实践国内研究性学习的效果不好。比如同样是课堂实验或者大报告,老师只会说“有兴趣的同学做一下”或者硬性要求要调研不少于多少...

2020-04-19 00:55:03 273

原创 MIT 6.828 Lab1 exercise3

exercise 1.3Q1:在哪一点处理器开始转为32位模式?什么导致了从16位转为32位?A1:boot.s中的下面这段代码。当cr0 register写入1时,就转为了32位。 lgdt gdtdesc movl %cr0, %eax orl $CR0_PE_ON, %eax movl %eax, %cr0Q2:boot loader最...

2020-04-18 19:10:09 359

原创 MIT 6.828 Lab1 exercise2

exercis 1.2The target architecture is assumed to be i8086[f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b0x0000fff0 in ?? ()+ symbol-file obj/kern/kernel(gdb) si[f000:e05b] 0xfe05b: cmpl $0x0...

2020-04-18 19:09:34 453

原创 MIT 6.828 Lab1 exercise1

exercise 1.1要求熟悉一下6.828这门课的参考文献,为以后阅读和写汇编代码打基础。注意特别提及的那片参考文献,讲解了两种汇编语言格式的不同之处。下面是这篇引文的小总结。AT&T格式语法采用了一种独特的内联汇编技巧,下面是AT&T格式与Intel格式的不同之处。编译器命名:采用前缀%AT&T:%eaxIntel:eax源操作数/目的操作数...

2020-04-18 19:09:02 369

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除