tc2.0环境下的C语言研究-简单使用寄存器并打印函数的偏移地址
2011-09-22 12:10
537 查看
在c语言中使用变量的目的是:为了编程时存储数据。所以如果有一种方法可以让我们不用变量就可以存储数据,我们就不再需要变量了。
在汇编中存储数据,我们可以利用AX、BX等寄存器和内存空间,在C语言中也是类似的
分别有:_AX、_BX、_CX、_DX、_BP、_SP、_CS、_DS、_SS、_ES等等
这些分别对应了我们在汇编学习到的寄存器。
编写一个url.c的程序
程序如下:
Main()
{
_AX=1;
_BX=1;
_CX=2;
_AX=_BX+_CX;
_AH=_BL+_CL;
_AL=_BH+_CH;
}
为了用debug查看汇编代码,所以必须知道main函数的入口地址,如下程序可以实现打印main函数的偏移地址
Main()
{
Printf(“x%\n”,main);//结果为0x01fa
}
通过u cs:1fa可以得到看到如下汇编代码
-u cs:1fa
0CC3:01FA B80100 MOV AX,0001
0CC3:01FD BB0100 MOV BX,0001
0CC3:0200 B90200 MOV CX,0002
0CC3:0203 8BC3 MOV AX,BX
0CC3:0205 03C1 ADD AX,CX
0CC3:0207 8AE3 MOV AH,BL
0CC3:0209 02E1 ADD AH,CL
0CC3:020B 8AC7 MOV AL,BH
0CC3:020D 02C5 ADD AL,CH
0CC3:020F C3 RET
可以有ret推测:c语言将函数实现为汇编语言中的子程序;经过大量实例可以看出,c语言将函数实现为汇编语言中的子程序的推测是成立的。
进一步推想:C语言将函数实现为汇编语言的子程序,从C语言的层面来看,main函数是一个程序的起始入口点,但实际上,可执行文件即这个.exe程序的入口点并不是main,
是谁调用了main函数呢?是C0S.obj,c0s.obj为程序的执行初始化了环境,比如数据段与代码段的建立等,然后调用main函数执行所需要完成的规定程序动作。
在汇编中存储数据,我们可以利用AX、BX等寄存器和内存空间,在C语言中也是类似的
分别有:_AX、_BX、_CX、_DX、_BP、_SP、_CS、_DS、_SS、_ES等等
这些分别对应了我们在汇编学习到的寄存器。
编写一个url.c的程序
程序如下:
Main()
{
_AX=1;
_BX=1;
_CX=2;
_AX=_BX+_CX;
_AH=_BL+_CL;
_AL=_BH+_CH;
}
为了用debug查看汇编代码,所以必须知道main函数的入口地址,如下程序可以实现打印main函数的偏移地址
Main()
{
Printf(“x%\n”,main);//结果为0x01fa
}
通过u cs:1fa可以得到看到如下汇编代码
-u cs:1fa
0CC3:01FA B80100 MOV AX,0001
0CC3:01FD BB0100 MOV BX,0001
0CC3:0200 B90200 MOV CX,0002
0CC3:0203 8BC3 MOV AX,BX
0CC3:0205 03C1 ADD AX,CX
0CC3:0207 8AE3 MOV AH,BL
0CC3:0209 02E1 ADD AH,CL
0CC3:020B 8AC7 MOV AL,BH
0CC3:020D 02C5 ADD AL,CH
0CC3:020F C3 RET
可以有ret推测:c语言将函数实现为汇编语言中的子程序;经过大量实例可以看出,c语言将函数实现为汇编语言中的子程序的推测是成立的。
进一步推想:C语言将函数实现为汇编语言的子程序,从C语言的层面来看,main函数是一个程序的起始入口点,但实际上,可执行文件即这个.exe程序的入口点并不是main,
是谁调用了main函数呢?是C0S.obj,c0s.obj为程序的执行初始化了环境,比如数据段与代码段的建立等,然后调用main函数执行所需要完成的规定程序动作。
相关文章推荐
- C语言getopt函数的简单使用
- 02、老徐教你学C语言基础篇2——C语言摩拳擦掌齐上阵(环境篇)——简单工程的创建与使用
- 学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全
- tc2.0环境下的C语言研究-需要耐心的指针研究
- C语言:使用strtok_s()函数简单分割字符串
- 【Kotlin 语言】1. 环境安装 | 变量 | 简单使用 | 函数 | 异常 | 递归
- C语言中数组作为函数的参数以及返回值的使用简单入门
- C语言linux环境下使用gettimeofday函数得到程序运行时间
- tc2.0环境下的C语言研究-变量与参数返回值
- C语言 函数的简单使用(库函数和自定义函数)
- 浅谈Linux环境下并发编程中C语言fork()函数的使用
- 如何使用纯win32函数和C语言实现一个简单的文本编辑器
- tc2.0环境下的C语言研究-函数如何接收不定数量参数
- tc2.0环境下的C语言研究-关于链接
- tc2.0环境下的C语言研究-关于main函数编程
- 使用C语言写PostgreSQL函数
- 使用C语言打印不同星号图案
- 使用C语言打印不同星号图案(矩形 平行四边形 三角形)
- 简单介绍CSS设置打印页面的方法及css里media的使用
- C语言中strspn()函数和strcspn()函数的对比使用