汇编语言
天麓
很懒的码农
展开
-
ARM指令解析之ADRP
先反汇编$ aarch64-linux-gnu-objdump -d -S vmlinux > vmlinux.txt然后再分析5.0内核的相关指令8068709 ffff000011c30040 <__create_page_tables>:8068710 mov x28, lr8068711 ffff000011c30040: aa1e03fc mov x28, x308068712 adrp ...原创 2022-03-07 07:43:55 · 1641 阅读 · 0 评论 -
慢慢欣赏linux 内核镜像剖析
linux kernel 5.0内核elf信息rlk@rlk:runninglinuxkernel_5.0$ readelf -h vmlinuxELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endi原创 2022-02-19 07:16:32 · 413 阅读 · 0 评论 -
ARM 反汇编
~/c_program/test$ cat test.c#include <stdio.h>long user_add(long x, long y){ long z = x + y; return z;}long main(long argc, char **argv){ long x = 5; long y = 6; long z = user_add(x, y); return 0;}gcc -g test.c -o testobjdump -D .原创 2022-01-27 16:25:39 · 807 阅读 · 0 评论 -
ARM指令解析之LSL
在手册的C3.3.9章节里面介绍。LSL Logical shift left LSL (immediate) on page C6-995打开配套链接=>C6.2.166 LSL (immediate)提示该指令类似于一个助记符,实际指令是UBFMLSL <Wd>, <Wn>, #<shift>is equivalent toUBFM <Wd>, <Wn>, #(-<shift> MOD 32), #(31-&l原创 2021-07-19 21:28:37 · 8311 阅读 · 1 评论 -
linux内核学习(7)脱胎换骨解压缩的内核
内核初始化 第一部分踏入内核代码的第一步(TODO: Need proofreading)https://www.javascriptc.com/books/linux-insides-cn/Initialization/linux-initialization-1.html原创 2020-10-19 22:55:58 · 160 阅读 · 0 评论 -
linux内核学习(3)建立页式内存映射
/* * Build early 4G boot pagetable */ /* Initialize Page tables to 0 */ leal pgtable(%ebx), %edi xorl %eax, %eax movl $((4096*6)/4), %ecx rep stosl /* Build Level 4 */ leal pgtable + 0(%ebx), %edi //edi是地址 leal 0x1007 (%edi), %eax //eax是内容, 内.原创 2020-10-01 23:37:19 · 197 阅读 · 0 评论 -
慢慢欣赏linux 内核的重定位
内核非解压缩部分是增加 -fPIC选项。static 的全局变量访问类似于函数,是通过当前地址ip + 固定偏移访问;非static 的全局变量是通过got表访问;没有外部函数,不依赖于外部函数,所以不需要got表和plt表。内核压缩的部分没有使用-fPIC选项,而是使用重定位表搞定,实现方式如下,参考后面的文章。1: subl $4, %edimovl 0(%edi), %ecxtestl %ecx, %ecx 重定位表最后以一个零结束,如果遇到零,则重定位完成。jz 2fad...原创 2020-09-19 22:18:33 · 713 阅读 · 0 评论 -
慢慢欣赏linux 内核反汇编分析
vmlinux: file format elf32-i386Disassembly of section .text:c0400000 <_text>:c0400000: f6 86 11 02 00 00 40 testb $0x40,0x211(%esi)c0400007: 75 14 jne c040001d <_text+0x1d>c0400009: 0f 01 .原创 2020-09-10 23:34:46 · 632 阅读 · 1 评论 -
x86_64汇编语言
【逆向学习记录】GOT表与PLT表https://blog.csdn.net/zhy025907/article/details/86088368【逆向学习记录】x86-64栈帧及跳转https://blog.csdn.net/zhy025907/article/details/85923242x86-64指令和ABIhttp://weizhenwei.github.io/blog/2014/12/25/x86-64zhi-ling-he-abi/...原创 2020-08-23 09:11:11 · 475 阅读 · 0 评论 -
编译链接学习笔记2
[a@b ~]$ cd compile_test/[a@b compile_test]$ lsfoo1.c foo1.o foo2.c foo2.o foo2.s hello hello.c hello.o libfoo.so[a@b compile_test]$ readelf -s hello.oSymbol table '.symtab' contains 10 entries: Num: Value Size Type Bind Vis ...原创 2020-08-22 23:47:08 · 606 阅读 · 0 评论 -
编译链接学习笔记1
Last login: Sat Aug 15 22:10:42 2020 from 192.168.1.5[zl@cliffr ~]$ suPassword:[root@cliffr zl]# /sbin/service smb statussmbd is stopped[root@cliffr zl]# /sbin/service smb startStarting SMB services: [ OK ][root@cliffr zl]# /sbin/service smb stat...原创 2020-08-22 07:52:56 · 610 阅读 · 0 评论 -
linux内核学习(1)第一阶段启动 解压缩内核
grub越过实模式直接跳转到保护模式的内核,找到自己的位置ENTRY(startup_32) //head_32.S (arch\x86\boot\compressed) 3871 2010/8/3 testb $(1<<6), BP_loadflags(%esi) //来源于grub的struct linux_kernel_params.loadflags jnz 1f cli movl $__BOOT_DS, %eax movl %eax, %ds movl %eax,原创 2020-08-15 22:21:48 · 366 阅读 · 0 评论 -
mips指令学习
func daddiu sp, sp, -64 //通过加法建立栈帧 lui v0, 0x815a //bit[31]为1,如果内核态是64位的话,那么如果bit[31]为1,则将高32位扩展为ffffffff, 也就是说对于64位系统来说,该值为0xffffffff815a0000 sd ra, 56(sp) //将调用者的返回值压栈 lw v1, 30880(v1) //30880=...原创 2020-04-12 21:38:11 · 393 阅读 · 0 评论 -
linux内核定位方法总结1 ECC hung-task和原子操作 反汇编调用栈
1 CPU支持ECC的话打开ECC,并且在系统异常中断的时候打印出来,因为内存多bit ECC会导致系统异常。MCHECK_EXCEPTION(0x200, Machine, machine_exception) =>static struct cpu_spec __initdata cpu_specs[] /* e500v2 */ .machine原创 2017-06-13 07:31:55 · 711 阅读 · 0 评论 -
中断学习之外部中断 powerpc实现
PPC中断处理函数的入口地址IVPR[32-47] | IVORn[48-59] | 0b'0000其中IPVR定义虚拟基址interrupt_base,描述如下:interrupt_base: //head_fsl_booke.S (c:\linux\linux-2.6.23\arch\powerpc\kernel) 26851 2007/10/10 /* Cri...原创 2018-07-15 21:00:23 · 1803 阅读 · 1 评论 -
慢慢欣赏linux x86 bootloader加载kernel的策略
对于老的x86来说,bootloader把内核看成两部分,实模式部分和保护模式部分。bootloader分别把实模式和保护模式加载到内存的不同地方,然后跳转到实模式部分。实模式最后跳转到保护模式部分。不同的bootloader必须都按照这个规矩来。下面以uboot为例讲解流程 struct boot_params *load_zimage(char *image, unsigned...原创 2018-08-10 22:27:15 · 1038 阅读 · 0 评论 -
慢慢欣赏linux x86 uImage实模式启动
header.S (c:\linux\linux-2.6.23\arch\i386\boot) //在X+0x9000+512的位置,也就是X+0x20:0x90000处的位置 # offset 512, entry point .globl _start_start: =>.byte 0xeb # short (2-byte)...原创 2018-08-19 10:04:32 · 331 阅读 · 0 评论 -
慢慢欣赏linux x86 int指令
int指令(软件中断指令)https://www.cnblogs.com/icqw/p/4915930.html原创 2018-08-29 06:54:46 · 1484 阅读 · 0 评论 -
uboot入门学习二 位置无关代码以及地址
test_got(void)fff87260: stwu r1, -16(r1)fff87264: mflr r0fff87268: bcl- 20, 4*cr7+so, fff8726cfff8726c: stw r30, 8(r1)fff87270: mflr r30fff87274: addis r30, r30, 3fff87278:...原创 2019-04-19 22:42:15 · 394 阅读 · 1 评论 -
微视linux swapper进程
swapper是linux第一个线程,也就是0号线程。很多书里面都有详细介绍。为什么linux启动之后,swapper线程就开始运行了呢?我认为主要有两点:第一点:静态部分。swapper线程通过静态初始化,设置的地址空间是内核高1G的空间。也就是说其使用的正文段,数据段和linux使用的正文段和数据段是完全一致的。第二点:动态部分。堆栈寄存器等寄存器在内核启动阶段通过汇编语句设置。...原创 2019-06-02 16:24:54 · 1088 阅读 · 0 评论 -
汇编语言学习
汇编中的movl,movw,movb的作用http://blog.chinaunix.net/uid-28458801-id-3558498.html原创 2019-06-09 16:03:42 · 154 阅读 · 0 评论 -
linux内核嵌入式汇编
之三:三步法解析内核中的嵌入式汇编https://blog.csdn.net/stillvxx/article/details/40707333Linux内核中的汇编语言https://blog.csdn.net/liu0808/article/details/54923555转载 2018-05-15 07:25:01 · 290 阅读 · 0 评论