日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第13章 程序的动态加载和执行(二,用户代码)

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第13章 程序的动态加载和执行(二,用户代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

弄清楚兩個問題,這段應(yīng)用代碼就容易讀懂了:

1,核心代碼是如何把指針指到這里的;

2,這段代碼是如何使用內(nèi)存的;

讀這個代碼的時候,可以類比我們平時寫的練習(xí)小程序,以C程序為例,我們首先是定義了一些數(shù)組、結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu),然后在main函數(shù)中調(diào)用printf把它們打印出來,因為定義了數(shù)據(jù)結(jié)構(gòu)所以下面才能知道在哪一塊內(nèi)存上工作,因為#include<stdio.h> 了所以可以使用printf,同樣下面用匯編寫的應(yīng)用程序也逃不出這個套路。在程序真正開始之前先啰里啰嗦的準(zhǔn)備一些事情,譬如“這個程序要在哪個數(shù)據(jù)區(qū)里,哪個棧區(qū)里”,“要用到哪些例程”,因為沒有鏈接器,還要寫一個頭部說明之類的東西,以便在操作系統(tǒng)加載應(yīng)用程序時看到頭部說明就知道該怎樣為這個應(yīng)用程序準(zhǔn)備資源了。


代碼如下:

;代碼清單13-3;文件名:c13.asm;文件說明:用戶程序 ;創(chuàng)建日期:2011-10-30 15:19 ;=============================================================================== SECTION header vstart=0program_length dd program_end ;程序總長度#0x00head_len dd header_end ;程序頭部的長度#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 ;代碼段長度#0x18data_seg dd section.data.start ;數(shù)據(jù)段位置#0x1cdata_len dd data_end ;數(shù)據(jù)段長度#0x20;-------------------------------------------------------------------------------;符號地址檢索表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:;=============================================================================== SECTION data vstart=0 buffer times 1024 db 0 ;緩沖區(qū)message_1 db 0x0d,0x0a,0x0d,0x0adb '**********User program is runing**********'db 0x0d,0x0a,0message_2 db ' Disk data:',0x0d,0x0a,0data_end:;===============================================================================[bits 32] ;=============================================================================== SECTION code vstart=0 start:mov eax,dsmov fs,eaxmov eax,[stack_seg]mov ss,eaxmov esp,0mov eax,[data_seg]mov ds,eaxmov ebx,message_1call far [fs:PrintString]mov eax,100 ;邏輯扇區(qū)號100mov ebx,buffer ;緩沖區(qū)偏移地址call far [fs:ReadDiskData] ;段間調(diào)用mov ebx,message_2call far [fs:PrintString]mov ebx,buffer call far [fs:PrintString] ;too.jmp far [fs:TerminateProgram] ;將控制權(quán)返回到系統(tǒng) code_end:;=============================================================================== SECTION trail ;------------------------------------------------------------------------------- program_end:



實驗現(xiàn)象:










總結(jié)

以上是生活随笔為你收集整理的第13章 程序的动态加载和执行(二,用户代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。