首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Intel寄存器名称解释及用途,%eax%ebx等都是什么意思

就连这四个分别叫做%eax,%ebx,%ecx,%edx的寄存器,尽管看似是随意按照abcd的字母排序的,其实这a,b,c,d也分别是四个单词的缩写。 %——百分号表示这是一个寄存器。...因为以前的intel寄存器都是16位的,它们的名字就是%ax,%bx等等,所以扩展到32位之后就在开头加上一个e,改名叫%eax,%ebx等 1....EAX - Accumulator Register(累加器) 当你写一个函数,最后返回一个值x(return x),那么这个x就要被存到%eax....当你要把一个数字扩展成64位,那么%eax存这个数的低32位,%edx存这个数的高32位。 2....(当你要把一个数字扩展成64位,那么%eax存这个数的低32位,%edx存这个数的高32位。) 后面四个,大家可以看文章开头的资料,我就懒得翻译了。 5.

6.8K60
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统调用原理

二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...call *SYMBOL_NAME(sys_call_table)(,%eax,4) movl %eax,EAX(%esp) # save the return value .....system_call 过程获取 eax 寄存器的值,然后通过 eax 寄存器的值找到要调用的 系统调用 入口,并且进行调用。调用完成后,系统调用 会把返回值保存到 eax 寄存器中。...Linux 使用寄存器来传递参数,参数与寄存器的关系如下: 第1个参数放置在 ebx 寄存器。 第2个参数放置在 ecx 寄存器。 第3个参数放置在 edx 寄存器。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。

4.1K30

AT&T与Intel汇编语言的比较

转自陈莉君一书《深入分析Linux内核源码》http://www.kerneltravel.ne运维 转自 陈莉君 一书《深入分析Linux内核源码...》 http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm 2.6.1 AT&T与Intel汇编语言的比较    我们知道...,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事情都发源于Unix。...就Linux所使用的386汇编语言而言,它也是起源于Unix。Unix最初是为PDP-11开发的,曾先后被移植到VAX及68000系列的处理器上,这些处理器上的汇编语言都采用的是AT&T的指令格式。...eax,[ebx+ecx] Leal     (%ebx,%ecx),%eax sub     eax,[ebx+ecx*4h-20h] Subl     -0x20(%ebx,%ecx,0x4),%eax

1.1K50

Linux内核分析》之分析system_call中断处理过程实验总结

2015-04-05 之前代码参考地址:《Linux内核分析》之触发一个系统调用实验总结 代码与分析 跟踪截图 多图预警,由于跟踪失败,感觉仅可做个动过手的见证,但可看性不高,可以略过,具体的看个人了。...主要代码段 xref: /linux-3.18.6/arch/x86/kernel/entry_32.S的490行起(持续更新中-2014-4-7) # system call handler stub...jae syscall_badsys syscall_call: call *sys_call_table(,%eax,4) syscall_after_call: movl %eax,PT_EAX...自动跳转到system_call这个位置来执行 系统调用机制一旦在start_kernel初始化好之后,即在代码中一旦出现int$0x80的指令立即跳转到system_call这个位置,其位置在xref: /linux...windCoder原创作品转载请注明出处  参考资料 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

1.5K10

动态调试elf文件的几种方法

动态调试elf文件的几种方法 最近在刷题的时候遇到了很多elf文件,虽然可以通过ida分析伪代码解出来,但是发现有些通过动态调试的方式可以直接找到flag,这样简单了不少,因为之前接触的linux下的逆向题目比较少...0x01 ida动态调试 ida不光可以静态分析函数伪代码,也可以通过动态调试的方式来分析linux下的elf文件。...首先将ida/dbgsrv/路径下的linux_server/linux_serverx64文件复制到linux下,两个文件分别是调试32位和64位程序使用的: 在linux下启动对应的文件: 把我们要调试的文件放到相应的文件夹中...在ida中选择Debugger-Run-Remote linux debugger 在弹出的对话框中,Application填写文件存放的位置和文件名,Directory中填写文件存放的路径,Parameters...是指传递的参数,如果程序运行需要传参的话可以在这填入,Hostname就是linux的ip地址,Port一般都是默认的23946,如果设置了password在下方填入,没有就空着: 进入ida动态调试界面

2.3K20

Win32 Linux汇编语法区别

就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。...二、Linux 汇编语法格式 绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。...AT&T 格式Intel 格式 movl -4(%ebp), %eaxmov eax, [ebp - 4] movl array(, %eax, 4), %eaxmov eax, [eax*4 +...array] movw array(%ebx, %eax, 4), %cxmov cx, [ebx + 4*eax + array] movb $4, %fs:(%eax)mov fs:eax, 4...,那我们也以这种方式来开始介绍 Linux 下的汇编语言程序设计。 在 Linux 操作系统中,你有很多办法可以实现在屏幕上显示一个字符串,但最简洁的方式是使用 Linux 内核提供的系统调用。

2.4K40

Linux内核之旅张凯捷——系统调用分析(1)

2 《Linux操作系统原理与应用》解释: 陈莉君老师的《Linux操作系统原理与应用(第二版)》对Linux系统调用解释为: 系统调用的实质就是函数调用,只是调用的函数是系统函数,处于内核态而已...call *sys_call_table(,%eax,4):根据EAX中的系统调用号调用对应的服务程序。 (3)退出系统调用: movl %eax, PT_EAX(%esp):保存返回值。...由于是32位即每个sys_call_table是4个字节,如果是64位则程序语句为call *sys_call_table(, %eax, 8) 在linux-2.6.39内核源码中: 32位下系统调用表在...执行下列命令: $ ldd /bin/uname linux-vdso.so.1 => (0x00007ffcb75de000) libc.so.6 => /lib/x86_64-linux-gnu/...- ld-linux-x86-64.so.2:程序解释器(链接器)。

1.5K30

Linux内核分析》之计算机是如何工作的 实验总结

马马虎虎学完了Python课程,一直想学下linux,看到里面有个linux的就选上了。...此处以32为例 cup对内存的操作方法 mov指令 常用mov寻址命令 movl %eax,%edx edx =eax; 解释:register mode 寄存器寻址 本句含义:将eax寄存器里的内容放到...  将 寄存器%eax压栈到栈顶,栈的位置在增长 what it does subl $4,%esp   压栈 esp-4,将堆栈的栈顶 movl %eax,(%esp) 间接寻址将eax放置到esp...2、对x86计算机大多数的指令可直接访问一个内存地址 AT&T汇编格式与Intel汇编格式略有不同 Linux内核使用的是AT&T汇编格式 windCoder原创作品转载请注明出处 参考资料 本文部分资料与图片参考自...《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

99810

linux下的C语言开发

大家好,又见面了,我是全栈君 在很多人的眼里,C语言和linux常常是分不开的。这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品。...当然,linux操作系统本身对C语言的支持也是相当到位的。...作为一个真正的程序员来说,如果没有在linux下面用C语言编写过完整的程序,那么只能说他对C语言本身的理解还相关肤浅,对系统本身的认识也不够到位。...如果还没有过Linux编程经验的朋友可以首先在自己的pc上面安装一个虚拟机,然后就可以在shell下面编写自己的C语言代码了。...如果你看到了,那么恭喜你,你已经可以开始linux的c语言编程之旅了。 当然,我们不会满足于这么简单的打印功能。

5.8K30

Linux Kernel CMPXCHG函数分析

最近看到Linux Kernel cmpxchg的代码,对实现很不理解。上网查了内嵌汇编以及Intel开发文档,才慢慢理解了,记录下来以享和我一样困惑的开发者。...好了,让我们来看Linux Kernel中的cmpxchg(网上找来的,我自己机器上没找到对应的头文件,据说在include/asm-i386/cmpxchg.h)实现: 01./* TODO: You..."=a"是说要把结果写到__ret中,而且要使用eax寄存器,所以最后写结果的时候是的操作是mov eax, ret (eax==>__ret)。"...在cmpxchg中,就是说_old和__ret使用一样的寄存器,而__ret使用的寄存器是eax,所以_old也用eax。...翻译一下: 比较eax和目的操作数(第一个操作数)的值,如果相同,ZF标志被设置,同时源操作数(第二个操作)的值被写到目的操作数,否则,清ZF标志,并且把目的操作数的值写回eax

4.1K100

CTF实战24 二进制软件逆向分析基础

我这里贴一段小小的汇编代码 如果你能不看下面的我的解释 明白这段代码的大概要做的操作 那么恭喜你,你已经熟练掌握基础的汇编指令了 mov ecx, dword ptr [eax+8Ch] add eax..., 88h mov edx, dword ptr [eax] mov dword ptr [ecx], edx 第三行呢把eax所指向的那个地址上的数据取出来 赋给了edx,最后把edx的值赋到了ecx...尤其是在代码量极大的时候 把汇编转换成等价的C语言代码,是会节省我们很多的分析时间的(不要跟我说有插件) 如果你能独立完成汇编到C语言代码的转换,那么说明第二点你也是合格的了~ 比如刚刚那段代码,我们转换一下看看(我喜欢用Linux...+ 140); // 88h = 136d eax = eax + 136; edx = *eax; *ecx = edx; // Not list return...要了解基本的Win32编程和Linux编程 比如恶意代码调用了哪个库,不需要记住每个Windows的API,但是你要知道哪里去查 比如Windows呢就是MSDN 如果是Linux呢,就是man 当然,

76220

操作系统篇-进程管理和中断

分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间) 线程在Linux中的实现 《Linux内核设计与实现》第三版28页 线程在Linux就是一个普通的进程...进程 Linux中也称为task,是系统分配资源的基本单位 资源包括:独立的地址空间,内核数据结构(进程描述符…),全局变量, 数据段… Linux进程描述符:PCB (Process Control...中是1457号线程) 调度策略 早期Linux 2.5 内核用的是Unix O(1)调度策略,按固定的时间片给程序 Linux内核2.6.23 采用CFS调度策略:Completely Fair Scheduler...;系统调用sys_exit movl $0, %ebx int $0x80 系统调用是通过int 0x80来实现的,eax寄存器中为调用的功能号,ebx、ecx、edx...第二个int0x80之前eax为1表示调用exit,ebx为0表示传入参数0。

1.2K00

写一个操作系统_07 设计自己的页表

对于4G的地址空间,每个页大小是4K,模仿Linux早期的做法,32位地址的前10位为页目录项,中间10位为页表,后面10位为偏移量。...备注: 我们模仿Linux,0-3G是用户空间,3G-4G是内核空间,又因为咱们写死了内核加载到物理地址1M以内,所以将0xc0000000 映射到物理地址的0-4M上 第一个页表也映射到0-4M这个空间..., PAGE_DIR_TABLE_POS add eax, 0x1000 ; 此时eax为第一个页表的位置及属性 mov ebx, eax ; 此处为ebx赋值...mov [PAGE_DIR_TABLE_POS + 0x0], eax ; ;第1个目录项,在页目录表中的第1个目录项写入第一个页表的位置(0x101000)及属性(7) mov...sub eax, 0x1000 mov [PAGE_DIR_TABLE_POS + 4092], eax ; 使最后一个目录项指向页目录表自己的地址

68020

Ret2syscall学习

主要还是要理解系统调用的原理: 系统调用 ​ 既然是执行系统调用,在这里就大概记录一下Linux系统下的系统调用,Linux的系统调用通过int 80h来实现,用系统调用号来区分入口函数,...) 系统调用完成相应功能,将返回值存入 EAX,返回到中断处理函数 中断处理函数返回到 API 中 PI 将 EAX 返回给应用程序 应用程序调用系统调用的过程是: 把系统调用的编号存入 EAX 把函数参数存入其它通用寄存器...最后 int 0x80 寄存器: 寄存器执行顺序 32位 eax->ebx->ecx->edx 64位 rdi->rsi->rdx->rcx->r8->r9 32位执行时 eax的参数为系统调用号...调用的过程就是在内存地址中读取之后用户输入/bin/sh先找到eax,ebx,ecx,edx以及int 0x80的地址 eax参数为read()函数系统调用号0x3,在edx,ecx,ebx传入相对应的...sleep(1) sh.recvuntil('Nh..') bin_sh = "/bin/sh\x00" sh.sendline(bin_sh) sh.interactive() ret2sys_64 linux

1.1K40
领券