第13章 程序的动态加载和执行(二,用户代码)
生活随笔
收集整理的這篇文章主要介紹了
第13章 程序的动态加载和执行(二,用户代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
弄清楚兩個問題,這段應用代碼就容易讀懂了:
1,核心代碼是如何把指針指到這里的;
2,這段代碼是如何使用內存的;
讀這個代碼的時候,可以類比我們平時寫的練習小程序,以C程序為例,我們首先是定義了一些數組、結構體等數據結構,然后在main函數中調用printf把它們打印出來,因為定義了數據結構所以下面才能知道在哪一塊內存上工作,因為#include<stdio.h> 了所以可以使用printf,同樣下面用匯編寫的應用程序也逃不出這個套路。在程序真正開始之前先啰里啰嗦的準備一些事情,譬如“這個程序要在哪個數據區里,哪個棧區里”,“要用到哪些例程”,因為沒有鏈接器,還要寫一個頭部說明之類的東西,以便在操作系統加載應用程序時看到頭部說明就知道該怎樣為這個應用程序準備資源了。
代碼如下:
;代碼清單13-3;文件名:c13.asm;文件說明:用戶程序 ;創建日期: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 ;數據段位置#0x1cdata_len dd data_end ;數據段長度#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 ;緩沖區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 ;邏輯扇區號100mov ebx,buffer ;緩沖區偏移地址call far [fs:ReadDiskData] ;段間調用mov ebx,message_2call far [fs:PrintString]mov ebx,buffer call far [fs:PrintString] ;too.jmp far [fs:TerminateProgram] ;將控制權返回到系統 code_end:;=============================================================================== SECTION trail ;------------------------------------------------------------------------------- program_end:
實驗現象:
總結
以上是生活随笔為你收集整理的第13章 程序的动态加载和执行(二,用户代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1 计算机主机里面都有些什么东西,计算机
- 下一篇: Web 压力测试