首页 > TAG信息列表 > rdi

攻防世界pwn题:Recho

0x00:查看文件信息 一个64位二进制文件,canary和PIE保护机制没开。   0x01:用IDA进行静态分析     分析:主程序部分是一个while循环,判断条件是read返回值大于0则循环。函数atoi()是将一个字符串转换成整型数据,看栗子:   这样子v7可以由我们所决定,所以很明显第15行存在栈溢出。

CSAPP(三)——程序的机器级表示

x86-64中的一些处理器状态 程序计数器:下一条将要执行的指令在内存中的地址 整数寄存器文件:有16个命名的位置,每个都能存储64位的值,可以存储地址或整数数据,它们根据命名的不同,经常被用于处理不同的数据。 条件码寄存器:保存最近执行的算数或逻辑指令的状态信息,可以用来实现条件或分

pwndbg 基本操作指令

pwndbg基本操作 基本指令 help //帮助 i //info,查看一些信息,只输入info可以看可以接什么参数,下面几个比较常用 i b //常用,info break 查看所有断点信息(编号、断点位置) i r //常用,info registers 查看各个寄存器当前的值 i f //info function 查看所有函数名,需保留符号

csapp lab3 attack

在做完lab2的时候,回去看了课本的第三章,最后一部分讲了一下栈溢出导致的代码漏洞会被如何利用,以及如何防止这种安全问题,当时就在想原来代码攻击是这样的,有空要自己实践一下。打开lab3发现原来就是我想要的,兴趣一下就来了 1. 预备知识 C语言的空间管理 1.栈区(stack): 由编译器自

[BUUCTF-pwn] bssidessf_ctf_2020_adding_machine

难度不大,要求输入n个数,但栈空间只能放127个数,要求输入数<127但可以输入负数,其它地址在输入debug时可以全部得到。 这里由于没有中途退出机制,需要精确的输入一个负数表示执行次数 v6 = get_long("Number of numbers to add"); if ( v6 <= 127 ) { get_data(v8, (unsign

Be careful when emitting branches in C1 LIR

发patch学到的: https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2018-September/030745.html 简而言之,lsra不能只能识别BlockBegin链接的cfg,但是不能识别block里面用__ branch这些创建的cfg,需要特别注意。 The problem is that there's control flow here that's

C语言 --- switch语句的原理(goto版本)

阅读之前: 本文copy自 《Computer Systems A Programmer’s Perspective》 ,第三版。的 3.6.8 节 switch语句。如果汇编代码部分看不懂,需要把前面的部分全部读懂。 C语言的switch的代码: void switch_eg(long x, long n, long *dest) { long val = x; switch (n) {

【C/C++】关于移位操作的一些自学小结

1、常见的左移右移,以无符号整型为例 可以看到,打印16进制的x值,只有15个f,说明右移4位没问题,高位正常补0。左移同理。 其中show方法参考《深入理解计算机系统(第三版)》写的函数,打印目标地址的字节。(我是小端,所以最低有效字节0xff在最前面打印,最高位的0x0f在最后打印。) 同理,

C语言 使用数组索引与指针索引 在循环中对编译器优化的影响及耗时分析

C语言在访问数组时既可以使用如a[i]这样的下标方式,也可以使用*(a+i)这样的指针方式,理论上完全等价。但是在编译器对循环作优化时,对于指针方式的索引很有可能分析不彻底,因此相比数组索引耗时有所增加 数组索引耗时 #include <stdio.h> #include <stdlib.h> #include <time.h

《深入理解计算机系统》实验三Attack Lab

前言 《深入理解计算机系统》实验三Attack Lab的下载和官网文档的机翻请看 《深入理解计算机系统》实验三Attack Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助。 Level 1 先把整个ctarget反汇编了看看里面是啥内容 linux> objdump -d ctarget 里面特别多内容,找

汇编 —— 特殊数据结构

文章目录 结构体练习题练习题答案 联合体数据对齐参考文献 写在前面:从腾讯实习回来之后,就感觉到自己的知识体系过于散乱。于是萌生了写一个自己的操作系统这样的心思,此为系列第一章,主要是讲解一些汇编知识的,内容大多从CSAPP中也可以获得。 本篇内容主要讲解:结构体和联合

CSAPP第3章家庭作业答案

3.58 long decode2(long x, long y, long z){ //x in %rdi, y in %rsi, z in %rdx y -= z; x *= y; long ret = y; ret <<= 63; ret >>= 63; ret ^= x; return ret; } 3.59 3.60 long loop(long x, int n){ //x in %rdi, n in %esi long result =0;

编译过程中遇到的问题

  记录一下有关编译的问题     1.条件转移和条件传送   编译器在编译条件控制的代码时,会采用两种策略进行编译。一个是条件转移(条件跳转),一个是条件传送。   条件转移:用条件跳转指令jmp等来完成编译。类似于goto,会跳过部分代码 movq $0,%rax jmp .L1

在C语言中实现协程库(一)----------协程切换原理详解

从这篇文章开始,我将一点一点详细介绍如何在c语言中实现协程库.并对其中涉及到的技术进行详细的解释. 感兴趣的小伙伴欢迎一起参与 代码地址 协程切换原理 使用glibc中<ucontext.h>提供的相关函数 用户态切换简单来说就是保存当前上下文,切换到新的上下文. 用户态程序的上下

9-6学习打卡(6.14)

昨天休息了一天(感觉是好久没休息了),打了一下午狼人杀剧本杀、打麻将,好快乐,不过一日不学果然心慌慌,不过我感觉学习模式该调整一下,每天起来得先写好list,要不然效率不够高。 6.14 to do list: 1.每日Pwn学习 2.级数复习 to 数据结构小章 and 算法小章 3.Cpp第一章 4.密码工程练习(附

《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab

这是CSAPP的第四个实验,这个实验比较有意思,也比较难。通过这个实验我们可以更加熟悉GDB的使用和机器代码的栈和参数传递机制。实验目的  本实验要求在两个有着不同安全漏洞的程序上实现五种***。通过完成本实验达到:深入理解当程序没有对缓冲区溢出做足够防范时,***者可能会如何利用

rdi

https://blog.csdn.net/ganggexiongqi/article/details/24435839     对一个应用程序员来讲,了解汇编不是必需的,更少有手写纯汇编的需求。但是如果能了解些基本的汇编知识,对程序调试和一些语言特性的理解是大有裨益的。本文介绍 AT&T 语法的汇编的要点以及 GCC 使用的内联

BUUCTF(pwn)jarvisoj_level3_x64

这道题是一道简单的rop类型的题目,跟之前做的题目有一些差异:( 这是64位的需要一些额外的操作 ) 64位汇编传参,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位

慢慢欣赏linux 系统调用

ENTRY(entry_SYSCALL_64) movq %rsp, PER_CPU_VAR(rsp_scratch) // 保存用户堆栈指针 movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp // 获取tss段作为内核栈 =># define cpu_current_top_of_stack (cpu_tss_rw + TSS_sp1) /* 讲用户寄存器压到tss段 */ /* Constru

CVE-2021-3156:Sudo 堆缓冲区溢出漏洞 POC

漏洞详情 CVE-2021-3156: 缓冲区溢出漏洞 在sudo解析命令行参数的方式中发现了基于堆的缓冲区溢出。任何本地用户(普通用户和系统用户,sudoer和非sudoers)都可以利用此漏洞,而无需进行身份验证,攻击者不需要知道用户的密码。成功利用此漏洞可以获得root权限。 用户可以使用如下方法进行

csapp attack lab level5

做完了第一个ROP来看看第二个,当然这个显然很难。 显然这个和touch3一样,但是无法注入,所以只能用ret来连接gadget,我刚开始看第一个建议很疑惑,为啥要复习movl。直到我从farm这个函数反汇编后所能用到的指令真是少的可怜。如图类似grep抓取关键字然后对照下图表发现能用的指令太

csapp attack lab level4

完成了Part1前三个缓冲区注入代码改变返回地址的实验,现在来看看Part2.因csdn新手,所以上传pdf并不会。直接截图把 这里是介绍部分,大致说明了因为两个原因不能进行代码注入而写shellcode,一个是ALSR栈上地址随机化,一个是NX就是栈没有执行的权限。这样怎么攻击呢?有些聪明的人

pwn之栈冲区溢出漏洞X64与X86

64位pwn入门 X86与X64函数调用的区别 x86 X86中函数传参是再栈中直接存放,需要时的时候出栈即可。 而再X64程序中。函数的参数在call的时候会进入rdi 、 rsi 、rdx 、rcx 、r8 、r9 当传输参数超过6个的时候就会压入栈中。 如下示意图 read(stdin,buf,0xa) call 压入 main ret read

深入理解计算机系统第三版 CSAPP:3e AttackLab实验记录

阅读实验手册,开始做Attacklab. CTARGET Phase 1 第一个Attack Phase要求调用存在的函数touch1.这个简单,自需要将touch1的首地址覆盖栈中的返回地址就行。 首先使用gdb调试ctarget,反汇编出getbuf的汇编代码: 可以发现这里分配了0x28(十进制是40)Bytes的栈帧。由于栈是低地址方

pwn-pwn4

依旧是先检查文件的类型和保护  64位没有保护  用IDA看看,read存在溢出,溢出0x18(不懂可以翻阅前面的博客) 函数system可以调用指令   shift+F12看看 $0在Linux中是shell的名称 那么我们可以利用system函数调用$0来getshell,因为是64位,需要用rdi寄存器来给system传值  现在找