linux
文章平均质量分 92
Eugene800
这个作者很懒,什么都没留下…
展开
-
开源项目管理:使用automake 各组件的关联
使用一个开源项目,获得源码后一般都是按configure/make/make install的步骤进行部署。网上有不少关于使用automake系列工具来生成/管理项目的,最终都指向ibm-developer的一篇文章,但说实话该文章跟真正的开源项目还有一大截距离,大部分coder情愿自己写makefile代替。本文原意是往开源项目中添加代码,当然不是简单的往现成的文件中加几行了事,而是,往开源项目原创 2015-02-04 11:06:01 · 1378 阅读 · 0 评论 -
sed命令详解
1.简介sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行转载 2016-10-09 23:49:53 · 544 阅读 · 0 评论 -
Persistent block device naming
This article describes how to use persistent names for your block devices. This has been made possible by the introduction of udev and has some advantages over bus-based naming. If your machine has转载 2016-12-27 23:22:05 · 609 阅读 · 0 评论 -
用blkid命令解读grub.cfg文件中的块设备
ubuntu引导配置文件grub.cfg真是越来越难看懂了:启动菜单里找不到类似root=/dev/sda这种存放根文件系统的块设备名,取而代之的是一堆让人摸不着头脑的UUID:menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-sim原创 2016-12-27 23:47:22 · 781 阅读 · 0 评论 -
udev (简体中文)
udev 是 Linux 内核的设备管理器。总的来说,它取代了 devfs 和 hotplug,负责管理 /dev 中的设备节点。同时,udev 也处理所有用户空间发生的硬件添加、删除事件,以及某些特定设备所需的固件加载。udev 取代了hotplug 和 hwdetect两个工具。与传统的顺序加载相比,udev 通过并行加载内核模块提供了潜在的性能优势。异步加载模块的方式也有转载 2016-12-29 00:07:40 · 2080 阅读 · 0 评论 -
ubuntu下成功进行栈溢出实验的先决条件
偶尔想在ubuntu下做个栈溢出的实验,很遗憾每次在gbd下运行都会报错:Program received signal SIGSEGV, Segmentation fault.首先想到的就是gcc编译时可能对程序启用了不可执行栈机制,遂用参数关闭该机制,运行后错误依旧:gcc -fno-stack-protector -g -o execstack execstack.c多次调试运行排原创 2017-04-19 23:10:25 · 2278 阅读 · 0 评论 -
学习LSM(Linux security module)之一:解读yama
转自:cnblog最近打算写一个基于LSM的安全模块,发现国内现有的资料极少。因此打算自己琢磨一下。大致的学习路线如下: 由易至难使用并阅读两到三个安全模块->参照阅读模块自己实现一个安全模块->在自己实现的同时阅读LSM实现的基本源码,由于Yama代码量小,结构十分清晰,可以作为入门的demo进行参照。 由于网上关于LSM的相关介绍已经烂大街了,就按自己的初步理解简单介绍一下LS...转载 2018-06-09 17:51:13 · 1562 阅读 · 0 评论 -
学习LSM(Linux security module)之二:编写并运行一个简单的demo
转自:cnblog 各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序。一:程序编写 先简单的看一下这个demo://demo_lsm.c#include <linux/lsm_hooks.h>#include <linux/sysctl.h>static unsigned long long count = 0...转载 2018-06-09 18:03:40 · 1888 阅读 · 0 评论 -
学习LSM(Linux security module)之三:Apparmor的前世今生和基本使用
转自:cnblog 先粗略讲一些前置知识。 一:MAC和DAC DAC(Discretionary Access Control),自主访问控制,是最常用的一类访问控制机制,意思为主体(文件所有者)可以自主指定系统中其它用户对其文件的所有权,最典型的就是Linux的"拥有者/同组用户/其他"。这种方式虽然为用户提供了很大的灵活性,但是缺乏必要的安全性 MAC(Mandat-ory ...转载 2018-06-09 20:31:31 · 678 阅读 · 0 评论 -
学习LSM(Linux security module)之四:一个基于LSM的简单沙箱的设计与实现
转自:cnblog 嗯!如题,一个简单的基于LSM的沙箱设计。环境是Linux v4.4.28。一个比较新的版本,所以在实现过程中很难找到资料,而且还有各种坑逼,所以大部分的时间都是在看源码,虽然写的很烂,但是感觉收获还是挺大的。 具体思路很简单,每个进程都有对应一个task_struct。可以使用task_struct来对进程的行为进行监测和限制,换句话来说,沙箱是基于进程实现的。 正如官...转载 2018-06-09 20:39:26 · 894 阅读 · 0 评论 -
制作initrd(6):重做Ubuntu安装盘
接上篇 制作initrd(5):解剖Ubuntu安装盘 。上一篇主要提到了分解Ubuntu安装盘,这篇是解剖的反过程--合成安装盘iso,内容相对比较少。 如果仅仅把安装盘拆开看看然后合回去,作为学习目的还可以,但是真的有点浪费篇幅了。其实,拆开的光盘还能塞点东西进去,就是所谓的定制光盘。笔者近期就遇到要把公司的一个客户端软件加密进Ubuntu光盘filesystem.squashfs镜原创 2016-02-24 21:10:16 · 2005 阅读 · 3 评论 -
制作initrd(5):解剖Ubuntu安装盘
ubuntu定期更新他们的iso,iso引导系统后会有Try/Install Ubuntu两个选项。特别是选择了livecd,仅仅一张盘子就能运行一个图形化的linux,总觉得挺神奇的。在好奇心的推动下我打算拆开iso分析它是怎样引导到系统的。 按常识,完整引导linux系统需要bootloader/kernel/(initrd)/fs这4个组件紧密配合(要不就叫启动4要素吧),光盘引导原创 2016-02-22 22:24:12 · 8125 阅读 · 3 评论 -
makefile同名目标处理
如果Makefile中有多个相同的目标,它是怎么执行的?target1: dep1target1: dep2 cmd2这种情况下,这两个相同的target1会被合并成target1: dep1 dep2 cmd2sample01:#测试多个相同目标,是如何执行的 all: test test: a.c a.h转载 2016-01-02 16:33:37 · 3013 阅读 · 0 评论 -
linux动态库的初始化和清理
a. Windows 中有 DllMain 入口函数, 而 Linux 中则没有。 b. Linux 中有特殊函数 _init 和 _fini, 主要是分别用来初始化动态库和关闭的时候 做一些必要的处理, 我们可以把自己认为需要的代码放到这两个函数里面, 它们分别 在动态库被加载和释放的时候被执行。具体说, 如果一个动态库里面有一个名字为 "_i转载 2015-03-16 09:26:17 · 3897 阅读 · 0 评论 -
Linux下入门级导出函数截获-使用LD_PRELOAD环境变量
博文篇首要感谢我的同事zxb,他曾经提示我有这种简便的截获方法。 近期要做Linux下libvirt事件审计,原计划是分析libvirt的通信数据从而进一步分析libvirt事件。尼玛,这怎么看都觉得工作量浩大,第一反应就是能不能偷懒。对于一般的审计事件,首先想到的是函数截获:遍历ELF文件的导出函数,然后替换之。顺带一提,现在安卓上的进程注入就这么做的,哪天有空了我也放一篇Linux原创 2015-03-10 09:37:41 · 1804 阅读 · 0 评论 -
LD_PRELOAD应用--基于libvirt审计(上)
转载请表明出处,本人邮箱:562703006@qq.com 随着近年来虚拟化技术飞速发展,使用虚拟化工具的人数日趋增加,同时孕育了大量相关产业。libvirt虚拟化审计就是在这个背景下产生的。 libvirt提供了统一抽象的虚拟化管理平台---libvirtd服务器,通过他可以与主流的虚拟化平台交互,例如QEMU/KVM等, 将用户虚拟机请求发送给特定具体的虚拟化介质,由该原创 2015-06-20 13:53:06 · 1023 阅读 · 0 评论 -
解决LD_PRELOAD无法截获printf的问题
前面博文 Linux下入门级导出函数截获-使用LD_PRELOAD环境变量 中说道用LD_PRELOAD的方法截获动态库中的函数,有人问我不能截获printf,我就在此文中回答这个问题吧。 首先看下他写的用于拦截的代码和测试代码拦截代码#include extern void printf(const char *format,...);void printf(const原创 2015-06-06 19:52:57 · 1810 阅读 · 2 评论 -
使用pkg-config升级和切换glib库
前几天有人问我如何升级glib库,并在各个版本之间切换。本想用rpm安装的,结果发现glib安装包不支持修改安装目录,如下图。 如此,只能在编译源码时指定安装路径了。其实,我这是为了演示升级才安装glib库,我本身不需要它,所以不要问我如何使用glib提供的功能~ 首先下载了glib2.4,解压后看看glib提供了哪些配置选项(都说只是演示库的升级,我并不想完整安装原创 2015-06-06 17:19:15 · 4236 阅读 · 0 评论 -
调试LD_PRELOAD注入的代码
LD_PRELOAD提供了平民化的注入方式固然方便,同时也有不便:注入库出错后调试比较困难。我琢磨了几天找到了可行的调试方法,当然未必是最有效的办法。抛出陋文,希望引来美玉~ 首先,写一段代码作为普通的动态库,公开接口,供人调用,如下://true.cint fake(const char* s1,const char* s2){ return 0;}gcc -g3原创 2015-06-10 23:19:11 · 3403 阅读 · 0 评论 -
制作initrd(2):update-initramfs和mkinitramfs脚本分析
前一篇文章提到更新initrd.img镜像时需要运行update-initramfs命令。起初以为是二进制文件,网上胡乱搜索一通发现update-initramfs和mkinitramfs两个命令同为脚本文件,既然是shell脚本那必须得分析内容并备忘。root@ubuntu:~# file `which update-initramfs`/usr/sbin/update-initramfs原创 2015-11-26 00:09:50 · 13481 阅读 · 2 评论 -
制作initrd(3):/etc/initramfs-tools/modules配置文件分析
这是前面:一文增补,简单解释在制作initrd过程中一些原理。 中提到如果想向initrd.img中添加新的模块,可在/etc/initramfs-tools/modules文件中添加相应模块的模块名及其参数。为什么如此即可?还是得从update-initramfs脚本说起。update-initramfs通过脚本函数generate_initramfs()进入mkinitramfs原创 2015-11-26 22:45:07 · 3276 阅读 · 0 评论 -
makefile目标覆盖
读到一篇文章"内核映像的形成——寻找第一个目标",作者在行文中提到了makefile目标覆盖,内容如下:"好了,我们跳过若干行变量定义,看到105行,我们的故事开始了:105 # That's our default target when none is given on the command line 106 PHONY := _all 107 _all: 看到105原创 2015-12-16 22:22:33 · 2074 阅读 · 0 评论 -
gdb 查找动态库方法
转自:IT超人当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot、set solib-absolute-prefix、set solib-search-path来指定库搜索路径。1. set sysroot 与 set solib-absolute-prefix 是同一条命令,实际上,set sysroot是set solib-...转载 2019-06-03 16:39:53 · 7545 阅读 · 0 评论