06 08x86汇编编程

汇编纲领:与硬件进行交互,将其他语言转换成汇编

Hello World

以.  开头的都是汇编指示,指导汇编器如何进行汇编
    其中.file  和 .def用于调试(通常可以忽略)
    .text 代码段
    .p2align a,b,c 指定下一行代码的对齐方式
        a: 2^a次幂对齐
        b: 使用b来填充
        c: 最多填充多少字节
        如 .p2align  4,,15   2^4对齐,空填充,最多填充15个字节
    .section 对应于PE文件中的节区表

    .equ  factor,3 将factor设置为3 增加程序的可读性

以 : 结尾的字符串,是用以表示变量或者函数的地址符号

系统调用

1.搞清楚系统调用与函数调用的区别,king级别,由int $0x80系统中断

在这里插入图片描述

调用实例

在这里插入图片描述

如果不了解系统调用可以看这篇bolg
    https://blog.csdn.net/hongbochen1223/article/details/46609877
系统调用参考网址
    http://syscalls.kernelgrok.com

$p=传递p的地址,相当于&p
例如 char buf[12]
movl $buf ,%edi ---->相当于将buf的首地址传递到%edi中

movl $0x89123318 , 0x89237182 将$0x89123318当作常数,传入到地址为 0x89237182中

静态库文件 .a文件

将多个相关的重定位对象文件集成为一个单一的带索引的文件,称之为归档文件(Archive file).

ar rs libc.a \ ato.o printf.o random.o  将ato.o printf.o random.o 三个文件打包成libc.a

内存管理 malloc free

内存分为四个区,代码区,数据区,heap,stack
heap的上限称为 system break 
    可以通过系统调用brk(0)获得
    也可以通过lib_c函数sbrk(0)
    
    
    call No.45(%eax) 设置新的brk为%eax 返回新的brk存储到%eax中

Gcc

gcc -S -m32 -O2  

gcc -O2 -mpreferred-stack-boundary=2  -S 将栈以2^2对齐,

gcc -romit-frame-pointer  %ebp不做栈帧基址寄存器,被解放,由%esp做指针寄存器


as -O --32  my-object-file.o  helloworld.s

ld -O my-exe-file -m elf_i386 my-object-file.o

编译出错时:sudo apt-get install g++-multilib

ld -lc -dynamic-linker /lib/ld-linux.so.2 -O cupid cpuid.o
    将动态链接库/lib/ld-linux.so.2 生成cpuid.o可执行文件

ld -shared write-record.o read-record.o -O librecord.so
将 write-record.o和reed-record.o 链接成动态库文件 librecord.so

ld -L . -dynamic-linker /lib/ld-linux.so.2 -O write-records -l record write-recoreds.o
使用共享库文件

链接

  1. 将单个.o文件中被外部使用的符号写入符号表中,在PE文件中就是导出表

  2. 重定位,最后生成的文件必须是完整的,是一个单一的数据段和代码段,将.o文件的符号解析为一个绝对地址,然后将对象文件中符号引用更新为绝对地址

  3. ELF对象文件标准的二进制格式(由AT&T)

    .so 可在运行或者装载时候链接
    .o : 可重定位的对象文件

新为绝对地址
3. ELF对象文件标准的二进制格式(由AT&T)

.so 可在运行或者装载时候链接
.o : 可重定位的对象文件


gcc -O2 -g -o p main.c swap.c 将main.c 和swap.c静态链接成p文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值