使用 gnu asm 在 x64 中使用参数执行

2023-12-30

我正在尝试在 Linux 的 GNU asm 中编写 shellcode,但无法使用参数调用 execve。

我正在尝试做什么:

execve("/bin/ls", ["/bin/ls", "-la", NULL], NULL);

这是我的代码:

.section .text
.globl _start
_start:
    push $0x3b
    pop %rax
    xorq %rdx,%rdx
    
    push %rdx
    movabs $0x61616161616c2d2d,%r8
    shr $0x8, %r8
    push %r8
    
    movabs $0x736c2f6e69622f2f,%r8
    shr $0x8, %r8                    
    push   %r8
    mov    %rsp,  %rdi
    push   %rdx
    push   %rdi
    mov    %rsp,  %rsi
    syscall
    
    push $0x3c
    pop %rax
    xorq    %rdi,  %rdi
    syscall

在 execv 的系统调用之前,这是我的 reg/stack :gdb https://i.stack.imgur.com/xztSp.png

我想 : RDI 必须包含“/bin/ls”地址 RSI 必须包含“/bin/ls”地址 RDX = 空

shellcode 正在执行 /bin/ls 但不使用 -la args。

怎么了 ?

thx


您从未将指针推入第二个 argv 字符串。push %rdx; push %rdi压入 NULL,然后将指针推入"/bin/ls",但是没有指向你的指针"-laaaaa"。你还需要一份push介于两者之间。例如:

    push %rdx           // NULL
    lea 8(%rdi), %rcx   // pointer to "-laaaaa"
    push %rcx
    push %rdi           // pointer to "/bin/ls"
    mov %rsp, %rsi      // pointer to the argument vector
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gnu asm 在 x64 中使用参数执行 的相关文章

  • MIPS 汇编不支持“.set noat”吗?

    目前 我正在学习GNU as 并在 info as 中找到了很多有用的信息 我发现 set noat 在MIPS指定的代码中使用 但是当在 info as 中搜索该指令时 我在节点 alpha指令 中找到了它的解释 但在 MIPS Depe
  • 0 和双字 0 有什么区别?

    正如问题所述 有什么区别 例如 mov eax 0 and mov eax dword 0 我一直在使用 cmp 语句 但我无法理解其中的区别 一个是地址 另一个是数值 如前所述 MOV 指令没有区别 对于 CMP 您将有以下区别 qwor
  • 使用`esp*scale 时寻址内存时出错

    内存寻址一般形式 发现了here https stuff mit edu afs athena project rhel doc OldFiles 3 rhel as en 3 i386 memory html is base index
  • X86 汇编将小写字母转换为大写字母

    实现toUpper函数 将字符串中的小写字母转换 为大写 该函数采用一个参数 char string 字符串是一个 char类型指针 指向字符串的开头 因为C 样式字符串以零结尾 我们不需要取长度 字符串作为另一个参数 我需要帮助开始 我不
  • 64 位上的 ASLR 和内存布局:是否仅限于规范部分 (128 TiB)?

    当加载启用 ASLR 的 PIE 可执行文件时 Linux 是否会限制程序段到规范部分 最多 0000 7fff ffff ffff 的映射 还是会使用完整的较低部分 起始位 0 显然 Linux 不会给你的进程提供不可用的地址 这会导致它
  • 本机代码、机器代码和汇编代码有什么区别?

    我对 NET 语言上下文中的机器代码和本机代码感到困惑 它们之间有什么区别 它们是一样的吗 这些术语确实有点令人困惑 因为它们有时使用不一致 机器代码 这是定义最明确的一种 它是使用字节码指令的代码 您的处理器 执行实际工作的物理金属部件
  • RISC-V反汇编器与秒杀运行结果不符?

    我已经设置了一个 hello world 程序只是为了测试我的riscv32 unknown elf工具链 spike pk等等虽然我设法使用打印了 hello worldspike isa RV32 pk hello elf 我发现如果我
  • “bash -c 命令参数”末尾的参数的目的是什么?

    From man bash If the c option is present then commands are read from the first non option argument command string If the
  • 调用/返回/jmp等后x86代码执行?

    我希望这个问题不会太愚蠢 因为它看起来似乎很明显 当我对缓冲区溢出进行一些研究时 我偶然发现了一个简单的问题 调用 返回 跳转后转到新指令地址后 CPU是否会执行该地址处的OP代码 然后将一个字节移动到下一个地址并执行下一个OP代码 依此类
  • 如何在 Ubuntu x64 中使用 ptrace 插入 int3?

    我正在努力追随本指南 http eli thegreenplace net 2011 01 27 how debuggers work part 2 breakpoints 通过设置断点达到相同的结果 唯一的区别是我在 x64 系统上 所以
  • 是否可以调用驻留在 exe 中的非导出函数?

    我想调用驻留在第 3 方 exe 中的函数并获取其结果 好像有should是一种方法 只要我知道函数地址 调用约定等 但我不知道如何 有谁知道我会怎么做 我意识到任何解决方案都是非标准的黑客 但有must成为一种方式 我的非恶意用例 我正在
  • 当我尝试在 Armv8 程序集中分配数组时,执行冻结

    所以我正在用汇编语言进行编程 这只是一个简单的代码 这样我就可以学习如何分配数组 以便稍后在 NEON 编程中使用它们 ASM FUNC FPE data balign 8 array skip 80 array1 word 10 20 3
  • 为什么 x86-64 上的 GCC 在函数内插入 NOP?

    给定以下 C 函数 void go char data char name 64 strcpy name data x86 64 上的 GCC 5 和 6 编译 普通gcc c g o其次是objdump 这到 00000000000000
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 是否有必要每个机器码只能映射到一个汇编代码?

    假设这两者本质上是相同的 push 1 and 0x1231 这表示每个汇编指令都映射到一个机器代码 但是否每个机器码只能映射到一个汇编代码呢 MIPS汇编语言有几个 伪指令 例如 move 在内部只是一个带有隐式 0 操作数的 add
  • 查找用户输入中的第一个和最后一个大写字母

    输入将从 a z 或 A Z 中获取 并且输入以星号结束 我们需要将输入字符的第一个和最后一个大写字母作为输出 另外 我们应该显示每次输入的内容 注意 我们逐个字符地获取输入 而不是作为字符串 测试用例1 输入 aAbCcP 输出 AP 测
  • Ruby 可选参数和多个参数

    我试图将方法的第一个参数设置为可选 后跟任意数量的参数 例如 def dothis value 0 args 我遇到的问题是 这似乎实际上不可能 当我打电话时dothis hey how are you good 我希望它将值设置为默认值
  • 从 64 位 nasm 代码接收 32 位寄存器

    我正在学习 64 位 nasm 我通过执行以下操作来汇编 nasm 文件 该文件仅包含 64 位寄存器 nasm f elf64 HelloWorld nasm o HelloWorld o 并链接它执行以下操作 ld HelloWorld
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • “实际或正式的参数列表长度不同”

    当我尝试将某些内容放入 括号中时Friends f new Friends friendsName friendsAge 它出现错误 Friends 类中的构造函数 Friends 不能应用于给定类型 必需 无参数 发现 字符串 整数 原因

随机推荐

  • 如何在 Bash 中获取当前可用磁盘空间?

    我正在运行一些操作 这些操作不断消耗我的磁盘空间 因此 我希望我的计算机在磁盘空间低于 2GB 时发出声音 我知道我可以通过运行获得列出可用磁盘空间的输出df h Filesystem Size Used Avail Capacity iu
  • 为什么 perf stat 将“stalled-cycles-backend”显示为<不支持>?

    Running perf stat ls显示这个 Performance counter stats for ls 1 388670 task clock 0 067 CPUs utilized 2 context switches 0 0
  • gcc静态库链接与动态链接

    我的构建环境是CentOS 5 我有一个名为 libcunit 的第三方库 我用 autotools 安装了它 它生成了两个libcunit a and libcunit so 我有自己的应用程序 它与一堆共享库链接 libcunit a位
  • 错误:“未提供名称属性”- 用于 log4j2.properties 自定义

    我正在自定义 log4j2 properties 以在所需位置生成日志文件 这样做时我收到以下错误 我的 log4j2 properties 文件 status debug name properties configuration Giv
  • CSS 伪类后备?

    我想使用tr nth child even odd 表的伪类 但我也想支持 IE 2 群体 那么 有没有纯CSS的方式来添加边框tr if nth child不支持 你可以试试选择性 http selectivizr com 我认为这是最简
  • 类模板构造函数重载解决歧义

    我正在编写一个像 stl 矢量这样的类模板 两个构造函数如下所示 template
  • 在 Python 中访问 R 用户定义的函数

    因此 我需要通过交叉验证进行原理组件回归 但我在 Python 中找不到可以执行此操作的包 我编写了自己的 PCR 类 但是当针对 R 的 pls 包进行测试时 它的性能明显更差 并且在高维数据 50000 个特征 上速度慢得多 我仍然不确
  • 如何强制 Hibernate 返回空值而不是 null?

    我正在使用 Oracle 11GR2 当 varchar2 字段为空时 执行System out println空白字段上将显示null在我的 Eclipse 控制台上 我怎样才能让它显示空字符串 在 getter 中使用这个技巧很好 但它
  • SameSite None 未在 Azure Web App 中设置 cookie 属性

    为了准备 Chrome 80 中 SameSite 即将发生的更改 我已将 NET Framework API 从4 6 2 to 4 7 2 我创建了一个简单的测试端点 只需设置一个 cookieSameSite None public
  • 强制下载 iOS 5.0.1 符号

    一位客户向我发送了 iOS 5 0 1 9A405 设备的崩溃日志 我在 Snow Leopard 上运行 Xcode 4 2 崩溃日志调用堆栈的系统部分无法符号化 并且它们似乎与崩溃相关 Xcode 中没有 iOS 5 0 1 符号 我没
  • WIX - 对安装取消运行自定义操作

    我正在使用 WIX 编写安装程序 当用户按下 取消 按钮时 我需要执行自定义操作 我创建了一个自定义操作 但我似乎找不到在哪里使用该操作 有什么想法我该怎么做吗 尝试类似的方法
  • 导航栏随着 CSS 动画消失

    我正在使用 Animate css 库中的 CSS3 动画 它们真的很棒 当我将它们与 WOW js 结合起来时 它们工作得非常完美 但是 当我向下滚动页面并且动画进入屏幕时 屏幕顶部的固定导航栏会消失几秒钟 动画显示的时间 然后返回屏幕
  • 适用于 Android 和 iOS 的应用程序 OpenStreetMap [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用 OpenStreetMap 制作一个移动本机应用程序 Android 和 iOS 我需要离线
  • Swift 中的惰性属性相当于 Objective C 中的惰性 Init getter

    Swift 中的惰性属性是否相当于用 Objective C 中的惰性加载模式覆盖 getter 来自文档 惰性存储属性是指直到第一次使用时才计算其初始值的属性 您可以通过在声明之前写入惰性属性来指示惰性存储属性 所以 大多数情况下 是的
  • 位图图像未显示在 imageview 中

    我创建了一个应用程序 在其中允许用户从图库中选择图像或从相机拍摄照片并将该图像上传到网络服务器 此代码工作正常 现在在其他屏幕中 我正在从网络服务器下载图像并存储该图像在 SD 卡中 问题是 如果从图库中选择图像 则图像将显示在图像视图中
  • ANTLR:自定义语法示例的词法错误帮助

    什么方法可以让我最大限度地报告词法错误 举一个简单的例子 我想为以下文本编写语法 为了简单起见 空格被忽略 字符串常量中不能有 myvariable 2 myvariable hello world Group myvariablegrou
  • 使用 window 作为原型在 javascript 中返回看似错误的值

    您希望此代码返回 123 但它返回的是窗口对象 function W this window 123 W prototype window new W window window object not 123 请检查后续问题 window
  • ElasticSearch 中过滤的嵌套inner_hits 查询的聚合

    我刚接触 ElasticSearch 几天 作为一项学习练习 我实现了一个基本的职位抓取工具 它聚合来自几个职位列表网站的职位 并用一些数据填充索引供我使用 我的索引包含每个列出职位的网站的文档 每个文档的属性都是一个 jobs 数组 其中
  • WPF - MVVM 屏幕管理

    想象一下您有一个复杂的数据对象 它足够复杂 以至于要编辑对象的各种属性 用户最好拥有多个屏幕 它本质上是一个配置项目的购物车 因此 一个屏幕就可以让您添加项目 另一种方法允许您对这些项目进行修改 即预先确定的更改 这些更改会产生相关成本 第
  • 使用 gnu asm 在 x64 中使用参数执行

    我正在尝试在 Linux 的 GNU asm 中编写 shellcode 但无法使用参数调用 execve 我正在尝试做什么 execve bin ls bin ls la NULL NULL 这是我的代码 section text glo