1:填充helloworld.c。已經被助教填了,這一步直接搞定- -
2:編譯出帶elf的helloworld,使用命令
gcc helloworld.c -t boot.lds -nostdlib uart.o -m16 -o helloworld.
3: objcopy -o binary helloworld bin得到去掉elf頭的可執行**段
dd if=bin of=out count=1 bs=512 conv=sync擴充到512個位元組
然後在511,512位元組處加入magic number 55 aa
具體使用vim -b out ,通過:%!xxd 可將其變成可修改的二進位制檔案形式來修改
4: qemu-system-i386 -m 1024 -hda out -nographic
1:qemu-system-i386 -m 1024 -hda out -nographic -s -s可以使qemu駐留並且等待乙個gdb來除錯
另外開啟乙個終端,進入gdb
通過命令target remote localhost:1234來使得gdb與qemu相連,之後正常使用gdb就行了
2:在helloworld.c的main()函式的最開始加入
asm volatile(「mov $0x7f00,%bp」);
這樣就能給bp賦上乙個初始值,找一塊記憶體去讀寫,也就是初始化了乙個棧。
3:我們給定的**預設就會觸發這乙個問題,經過一系列處理得到最後去執行的檔案out,
將其反彙編可以發現port_out()的**段出現在了main()的**段前面
在沒有了elf檔案以後,qemu去執行out只會從**段的初始開始乙個指令乙個指令執行
這樣就導致了問題。
解決思路有兩個:
1>讓port_out()不出現在main前面,我們將port_out()從uart.h放到helloworld.c就行了
2>讓有函式出現在main前面也不影響,在整個程式的最開始加入乙個函式call_main()就行了。
實驗報告1
part1驗證性內容總結 1.程式編寫中常會漏寫,多寫符號。2.計算機中的運算分級,得出的結果根據定義的未知量的形式來決定。整數相除時為了體現順序可以用括號的形式。3.對於自加自減的問題,要分清楚 的位置的含義,對於編寫中的變數的影響是不同的,有可能因此產生誤差,誤差隨計算過程中逐漸變大。4.在寫程...
實驗報告1
一.實驗目的 1.了解軟體開發文件的組織 標準及編寫 2.了解常用工具的用途及掌握各種工具的安裝 二.實驗內容 1.了解gb8567 88,gb8567 2006的內容,掌握需求說明書 概要設計 詳細說明書的主要內容 2.了解visio的作用,安裝visio,按照實驗指導使用visio完成系統流程圖...
實驗報告1
學 號 201821450011 中國人民公安大學 chinese people public security university 網路對抗技術 實驗報告 實驗一網路偵查與網路掃瞄 學生姓名 厲明鑫 年級 2018級 區隊 網路安全與執法五區隊 指導教師 高見 資訊科技與網路安全學院 2020年...