当前位置: 首页 > news >正文

Linux mips架构链接库函数调用plt表汇编代码分析

linux调用共享库中的函数时通过plt表和got表实现位置无关代码,过程中涉及到lazy binding,即在第一调用外部函数时解析被调用的函数地址并将地址写入到got表,后续调用则不需要解析函数地址。这一部分和硬件架构有关,具体的是和cpu指令集相关,下面分析龙芯3a4000芯片这一块的代码,3a4000采用的是mips指令集。
1.c

void aaa();
int main(int argc, char **argv)
{int a = 0;aaa();a = 2;return 0;
}
#编译参数
gcc 1.c -L. -laaa -z lazy -g

2.c

void aaa()
{int a = 1;
}
#编译参数
gcc 2.c -fPIC -shared -o libaaa.so

使用gdb调试生成的可执行程序,打断点在mian函数的第一行。

反汇编查看main函数

可以看到sw zero,28(s8)对应int a = 0;这行代码,

ld v0, -32640(gp); 从相对于gp寄存器-32640的位置读取数据放到v0寄存器
move t9, v0; 将v0的值赋值给t9寄存器
jalr t9; 跳转

使用info registers命令查看寄存器值

x /1xg 读取0x120019010-32640位置内存

执行ni命令

 

http://www.lryc.cn/news/463584.html

相关文章:

  • python 作业1
  • Apache 出现 “403 forbidden“ 排查方法
  • vue video播放m3u8监控视频
  • uniapp 获取签名证书 SHA1 自有证书签名打包
  • Open3d开发点云标注工具问题总结(二)
  • 【FreeRTOS】
  • 洛谷 P4995:跳跳! ← 贪心算法
  • 代理 IP 在 AI 爬虫中的关键应用
  • 【Vercel】Vercel静态部署踩坑
  • 【Spring】关于Spring中aware相关接口的作用
  • 动态内存管理及RAII的简单应用
  • 7、Vue2(一)
  • Chapter11
  • LLAMA2入门(一)-----预训练
  • 使用poi-tl动态写入目录更新问题解决
  • OpenCV高级图形用户界面(9)更改指定窗口的位置函数moveWindow()的使用
  • 华山论剑之Rust的Trait
  • AI 编译器学习笔记之七五 -- pdb 使用方法
  • 15分钟学Go 第8天:控制结构 - 循环
  • 后端接收参数的几种常用注解
  • 如何使用docker在linux中配置C++环境
  • darknet_ros 使用教程
  • 第九课 Vue中的v-bind指令拓展
  • DOIP协议介绍2-Diagnostic power mode information request (0x4003)消息
  • Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包
  • 二叉树中的最长交错路径
  • 高校企业数据可视化平台功能介绍/特色功能
  • RHCE第三次笔记SSH
  • JAVA基础-包装类
  • 复合逻辑运算与复合逻辑门