首页 > 进入保护模式(四)设置一些公用的方法

进入保护模式(四)设置一些公用的方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、下雨

        最近一直在下雨,对于这样的天气真是厌烦,但也没办法,是不?夏天到是期盼,可以降温,这个季节太冷。

        这算是第三次拿起这本书,希望在年前能够看完。

        最近除去工作也算很忙,上下班路上看看文学小说,还有就是这个第三次打算看完的书。因为地点是在有点远,玩个游戏手机电池经不住,所以就这样了;看这本书是因为这次算是有督促,所以这次不想中途放弃。

二、言归正传

        第三次看的技术书是《x86实模式到保护模式》,希望这次能够看完。当然是抄书了,不知道什么时候养的习惯

        书中介绍的如何调用系统API的一个实现。

        在保护模式中想要访问代码,就要知道 选择子+偏移量 这个就是目的地的地址,不然怎么坐车都不知道

       下面是一个程序的头部,在头部偏移0x28的地方有个表,记录的是当前程序要用到的系统提供的函数 

                                                                         函数名的长度是256个字节       

;===============================================================================
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:

在系统中也有个表记录的是 系统提供的函数名、偏移量、选择子

                                当加载程序的时候就在这个表中匹配字符串

                                把加载的程序名用偏移量+选择子替换掉了,那么程序就可以飞了

                                参数传递要么寄存器、要么共有的堆栈了

;符号地址检索表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

 

    

       

转载于:https://my.oschina.net/findurl/blog/185412

更多相关:

  • 文章目录 ceph环境源码修改 主文件:`ceph-disk/main.py`main函数入口parse_args(argv)增加子命令解析get_conf函数使`conf`生效修改所有调用get_conf函数的上级函数参数配置 由于最近工作中需要优化osd部署流程,单节点并发加盘过程需要指定特定conf文件,来...

  • 本文是一个示例,展示了如何直接使用BerkeleyDB的memory pool功能。BerkeleyDB对外开放了它的memory pool, logging,mutex 和 lock子系统,应用程序开发者可以使用mpool来管理其他文件,按页对那些文件做读写操作,还可以同时使用lock子系统实现互斥。同时你还可以注册你自己的日志读...

  • 最近公司要做一个企业微信的小程序,方便企业内的成员来登录,以便一些公司内的业务,只限于公司内的成员来操作,因为有微信小程序的开发经验,所以先当作微信小程序来开发了!首先来讲一下这个企业微信小程序与微信小程序登录的不同,下面是微信小程序登录的流程:小程序内需要调用wx.login(),获取临时登录凭证code,并回传到开发者服务器,然后...

  • sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。下面我们通过一个极简单的test.py程序的运行结果来说...

  •   标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率。 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量,清晰的细节和没有重复的模式。 你是不是在玩节点滑块,得到了一些有趣的结果,但不确定引擎盖下到底发生了什么?掌握了节...

  • gprof用于分析函数调用耗时,可用gprof分析最耗时的函数,以便优化程序。 gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。 gprof默认不支持多线程程序,默认不支持共享库程序。 gcc 编译程序时添加编译选项-pg 运行程序,程序退出时生成 gmon.outgprof ./...

  • 一.虚拟机、linux简介 简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu 操作系统:linux(centos、Ubuntu、redhat),Android,Windows(xp、win8、win10) 进程,多个程序,分时技术,并行技术 一次打开多个程序,我们在只有一个cpu,如何让这些程序进...