进入保护模式(四)设置一些公用的方法
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一、下雨
????????最近一直在下雨,對(duì)于這樣的天氣真是厭煩,但也沒辦法,是不?夏天到是期盼,可以降溫,這個(gè)季節(jié)太冷。
????????這算是第三次拿起這本書,希望在年前能夠看完。
????????最近除去工作也算很忙,上下班路上看看文學(xué)小說(shuō),還有就是這個(gè)第三次打算看完的書。因?yàn)榈攸c(diǎn)是在有點(diǎn)遠(yuǎn),玩?zhèn)€游戲手機(jī)電池經(jīng)不住,所以就這樣了;看這本書是因?yàn)檫@次算是有督促,所以這次不想中途放棄。
二、言歸正傳
??????? 第三次看的技術(shù)書是《x86實(shí)模式到保護(hù)模式》,希望這次能夠看完。當(dāng)然是抄書了,不知道什么時(shí)候養(yǎng)的習(xí)慣
??????? 書中介紹的如何調(diào)用系統(tǒng)API的一個(gè)實(shí)現(xiàn)。
??????? 在保護(hù)模式中想要訪問(wèn)代碼,就要知道 選擇子+偏移量 這個(gè)就是目的地的地址,不然怎么坐車都不知道
???????下面是一個(gè)程序的頭部,在頭部偏移0x28的地方有個(gè)表,記錄的是當(dāng)前程序要用到的系統(tǒng)提供的函數(shù)?
???????????????????????????????????????????????????????????????????????? 函數(shù)名的長(zhǎng)度是256個(gè)字節(jié)???????
;=============================================================================== SECTION header vstart=0program_length dd program_end ;程序總長(zhǎng)度#0x00head_len dd header_end ;程序頭部的長(zhǎng)度#0x04stack_seg dd 0 ;用于接收堆棧段選擇子#0x08stack_len dd 1 ;程序建議的堆棧大小#0x0c;以4KB為單位prgentry dd start ;程序入口#0x10 code_seg dd section.code.start ;代碼段位置#0x14code_len dd code_end ;代碼段長(zhǎng)度#0x18data_seg dd section.data.start ;數(shù)據(jù)段位置#0x1cdata_len dd data_end ;數(shù)據(jù)段長(zhǎng)度#0x20;-------------------------------------------------------------------------------;符號(hào)地址檢索表salt_items dd (header_end-salt)/256 ;#0x24salt: ;#0x28PrintString db '@PrintString'times 256-($-PrintString) db 0TerminateProgram db '@TerminateProgram'times 256-($-TerminateProgram) db 0ReadDiskData db '@ReadDiskData'times 256-($-ReadDiskData) db 0header_end:在系統(tǒng)中也有個(gè)表記錄的是 系統(tǒng)提供的函數(shù)名、偏移量、選擇子
????????????????????????????????當(dāng)加載程序的時(shí)候就在這個(gè)表中匹配字符串
??????????????????????????????? 把加載的程序名用偏移量+選擇子替換掉了,那么程序就可以飛了
??????????????????????????????? 參數(shù)傳遞要么寄存器、要么共有的堆棧了
;符號(hào)地址檢索表salt:salt_1 db '@PrintString'times 256-($-salt_1) db 0dd put_stringdw sys_routine_seg_selsalt_2 db '@ReadDiskData'times 256-($-salt_2) db 0dd read_hard_disk_0dw sys_routine_seg_selsalt_3 db '@PrintDwordAsHexString'times 256-($-salt_3) db 0dd put_hex_dworddw sys_routine_seg_selsalt_4 db '@TerminateProgram'times 256-($-salt_4) db 0dd return_pointdw core_code_seg_selsalt_item_len equ $-salt_4salt_items equ ($-salt)/salt_item_len?
????
???????
轉(zhuǎn)載于:https://my.oschina.net/findurl/blog/185412
總結(jié)
以上是生活随笔為你收集整理的进入保护模式(四)设置一些公用的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [大數據、Big Data、巨量資料、海
- 下一篇: 关于dell - R710的磁盘管理