
编译原理
文章平均质量分 87
shenhuxi_yu
记录职业生涯
展开
-
linux elf 格式详解
linux elf格式与程序的链接和加载过程原创 2022-09-02 23:06:56 · 2215 阅读 · 0 评论 -
交叉编译wpa-supplicant
https://blog.youkuaiyun.com/fangye945a/article/details/86658621http://distfiles.macports.org/openssl/http://www.infradead.org/~tgr/libnl/原创 2020-10-27 19:46:00 · 227 阅读 · 0 评论 -
gcc -fstack protector 原理
之前有次写驱动的时候自己挖了个坑把short类型的参数当int来用导致子函数返回时提示踩了stack protector 机制埋设的guard原创 2020-05-18 10:24:43 · 2457 阅读 · 0 评论 -
zephyr device-tree
zephyr build overview官方说明文档:https://docs.zephyrproject.org/latest/guides/build/index.htmlzephyr 也同样采用了设备树来描述板级信息,实际使用上zephyr并不是像linux那样用dtc编译成dtb然后代码中去解析dtb,从官方文档可以看出,zephyr会把dts最终转变成head file来使用的,...原创 2020-03-09 12:54:15 · 964 阅读 · 0 评论 -
动态链接顺序
从网上查找知道RPATH的优先级高于LD_LIBRARY_PATH那LD_LIBARY_PATH中的多个路径存在同名的so文件的时候bin会选择哪一个?用两个so和一个bin做实验验证下上面两个问题实验环境gcc 5.4 ubuntu 16文件目录结构a.c b.c mai.c build.sh start.sh ./lib ./lib/deps文件内容如下a....原创 2020-02-26 17:20:24 · 297 阅读 · 0 评论 -
gdb交叉编译与编译参数说明
下载can-utils源码后手动编译的步骤./configure CC=arm-linux-gnueabihf-gcc --target=arm-linux --host=arm-linuxbuild:执行代码编译的主机,自己的主机系统ubuntu会是x86_64-pc-linux-gnu。如果不做配置一般由config.guess来猜就可以。host:编译出来的二进制程序所执行的主机...原创 2020-01-14 16:43:18 · 1027 阅读 · 0 评论 -
insmod ko invalid module format [unknown relocation]
linux版本4.14 aarch32用如下出错版本的Makefile编译basic.ko,insmod ko到kernel后提示invalid module format, dmesg查看内核打印信息 basic: unknown relocation: 10出错的版本obj-m := basic.oARCH := arm CROSS_COMPILE := arm-linux-g...原创 2019-12-05 12:11:21 · 1437 阅读 · 0 评论 -
linux stack usage debug
from:https://elinux.org/Kernel_Small_Stacks静态检查elf的栈使用空间用kernel自带的checkstack.pl静态检查elf的调用深度第三方工具stack_size动态查看每个task的栈空间使用状况使用kernel config :CONFIG_DEBUG_STACK_USAGE详情如下:checkstack.plThe k...转载 2018-11-13 00:06:01 · 1697 阅读 · 2 评论 -
arm64 linux 执行elf32 提示no such file or directory
arm64 下执行另外一个平台编译的elf32 程序的时候文件存在但是系统仍然提示no such file or directory1、搜查网页大部分都是讲找不到so库文件用LD_LIBRARY_PATH指定好(export LD_LIBRARY_PATH 是修改全局的,LD_LIBRARY_PATH=/lib/test:/lib/run a.out 只对当前的执行文件有效),用ldd 或者...原创 2018-07-04 00:02:26 · 2231 阅读 · 0 评论 -
linux arm64 nokaslr内核起始地址随机化
arm64 linux 支持内核起始地址随机化kallsymbols 得到的符号地址大都是编译阶段就可以决定的,决定于lds链接obj文件的顺序,编译生成obj时会把不同类型的变量放到固定的section内,如下实例 编译环境是cygwin64下的gcc:uboot 命令:addboot nokaslrlinux 命令: echo 1 > /proc/sys/kernel/kptr_rest...原创 2018-04-09 00:09:16 · 3002 阅读 · 0 评论 -
linux copy_from_user实现原理
linux4.9 aarch32linux fixup table说明: http://cache.baiducontent.com/cm=9d78d513d99d1af31fa7837e7c428c2c5e1697634d91834521838448e2374c41362cf7fc677c1f5e95833e2616ae3a41f7b57337200357eccb979f4aaaeacf7...原创 2018-11-06 01:00:37 · 7261 阅读 · 0 评论 -
git 常用命令
git diff 查看当前没有add 的内容修改git diff --cached查看已经add 没有commit 的改动 使用 git diff HEAD 是上面两条的合并git log -p filename 查看具体文件的修改历史git status 查看当前的git 仓库的状态git rese原创 2017-04-05 13:26:11 · 262 阅读 · 0 评论 -
动态链接原理分析
linux 下动态链接实现原理符号重定位讲动态链接之前,得先说说符号重定位。c/c++ 程序的编译是以文件为单位进行的,因此每个 c/cpp 文件也叫作一个编译单元(translation unit), 源文件先是被编译成一个个目标文件, 再由链接器把这些目标文件组合成一个可执行文件或库,链接的过程,其核心工作是解决模块间各种符号(变量,函数)相互引用的问题,对符号的引用本质是对其转载 2017-05-08 23:20:23 · 7386 阅读 · 1 评论 -
编译与链接时对extern的处理
常用的extern在编译与链接阶段的处理1、 声明外部变量 现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。 创建一个工程,里面含有A.cpp和B.cpp两个简单的C++源文件: //A.cpp int i; void main() { }转载 2017-05-24 08:59:47 · 5942 阅读 · 0 评论 -
arm-linux-gcc char与signed char和unsigned char
一、二、三者之间关系1.ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char。而不是像short、int一样只有两种(int默认就是unsigned int).2.三者都占1个字节3.signed char取值范围是 -128 到 127(有符号位)unsigned char 取值范围是 0 到 2554.内存中一串二转载 2017-09-16 11:38:07 · 2155 阅读 · 0 评论