execve相关内容
https://www.exploit-db.com/exploits/46907 我的理解是,由于x64调用约定,execve的第三个参数envp应该存储在RDX中。但是这个外壳代码不会将该寄存器置零,它只会将RSI寄存器(存储ARV)置零。因此,如果RDX的当前值未指向有效位置,则会导致段错误,不是吗? 我是否遗漏了什么? 推荐答案 写rdx(带0):注意syscall
..
第一次海报.计算机科学二年级学生. 我正在探索在 C 源代码->GCC 编译->Linux 执行环境的上下文中在虚拟地址空间的 .data 部分中创建静态变量. C 程序是 test.c int main(){寄存器 int i = 0;寄存器 int sum = 0;静态 int staticVar[10] = {1,2,3,4,5,6,7,8,9,-1};环形:总和 = 总和 +
..
我用gcc编译链接了最基本的C程序test.c: int主要的() {} 正如预期的那样,输出是一个动态链接的可执行文件: $ 文件测试测试:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.26,BuildID[sha1]=0x0f806c099f74132a158d98aebde4639ae099897
..
我在 Ubuntu 9.10 x86_64 上安装了一个二进制 Linux 应用程序.该应用程序附带了旧版本的 gzip (1.2.4),该版本是为更旧的内核编译的: $ 文件 gzipgzip:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.0.0,已剥离 我无法执行此程序.如果我尝试过,就会发生这种
..
我正在研究execve shellcode, 操作系统:Linux bt 2.6.39.4 root@bt:~/exploit# cat gshell.s .globl _start_开始:没有jmp 我的字符串壳:popl %esixorl %eax,%eaxmovl %al,9(%esi)movl %esi,10(%esi)movl %eax,14(%esi)movb $11,%
..
我是 asm 的新手,我正在尝试对/bin/bash 执行系统调用.但是我目前遇到以下问题: 我的代码适用于第一个参数长度小于 8 个字节的任何 execve 调用,即“/bin/sh"或“/bin/ls": .section .data名称:.string "/bin/sh".section .text.globl _start_开始:#execve 的第三个参数,设置为 NULL异或
..
我是 asm 的新手,我正在尝试对/bin/bash 执行系统调用.但是我目前遇到以下问题: 我的代码适用于第一个参数长度小于 8 个字节的任何 execve 调用,即“/bin/sh"或“/bin/ls": .section .data名称:.string "/bin/sh".section .text.globl _start_开始:#execve 的第三个参数,设置为 NULL异或
..
我的代码: .section .data名称:.string“/bin/sh";参数:.string "-c";.string “ls".section .text.globl _start_开始:推送 $0推送名称movq 59 美元,%raxmovq %rsp, %rdi推送 $0推送参数movq %rsp, %rsimovq $0, %rdx系统调用 我知道 execve 的第二个参数是
..
我正在尝试编写某种漏洞利用程序,但在使我的 asm 代码在堆栈上的任何位置运行时遇到了问题.就是这样: BITS 64全局_start_开始:mov rax, 59jmp 短文件c1:流行音乐jmp 短 argvC2:流行音乐移动 rdx, 0系统调用回复文件:呼叫 c1数据库 '/bin/sh',0argv:呼叫 c2dq arg, 0 由于选择了行,此代码在堆栈上的任何地方都不起作用,因
..
我怎样才能看到execve函数的实现(在x86_64 Linux下),它在未分配的库中?我想要这个,是因为我想知道如何使用汇编器来调用外部程序,而无需调用execve.我知道有一个名为execve的系统调用,但是我不知道如何使用它. 如何将char *类型和char * []类型的变量放入寄存器? 解决方案 仅查看内核源代码(更具体地说:arch/YOUR-ARCH/kernel/h
..
我正在尝试使用Linux上 unistd.h 中的 execve()生成新进程.我尝试将以下参数传递给它 execve("/bin/ls","/bin/ls",NULL); ,但没有结果.我也没有收到错误,程序刚刚退出.有这种情况发生的原因吗?我尝试过以root和普通用户身份启动它.我需要使用 execve()的原因是因为我正在尝试使其在像这样的程序集调用中工作 程序:db"/bin/ls",0
..
第一次海报. CS 2年级学生. 我正在探索在C源代码-> GCC编译-> Linux执行环境的上下文中,在虚拟地址空间.data部分中创建静态变量的方法. C程序是test.c int main() { register int i = 0; register int sum = 0; static int staticVar[10] = {1,2,3,4,5
..
我找到了一种不带参数(例如"ls","pwd")调用unix外部命令的方法.就像这样: //Child process char cwd[1024]; getcwd(cwd, sizeof(cwd)); char *argv[] = {*args, NULL}//(ex.) {"ls", NULL} char *env[] = {cwd, NULL}; //concat():method t
..
我想从我的代码中执行一个程序,并为其提供环境变量和参数. AFAICT,execve是正确的选择. 但是,execve收到一个path参数,而不是filename,这意味着它希望第一个参数是可执行文件的路径. 我知道我可以自己解析$PATH来找到路径,但实际上,别无选择吗?没有其他人可以在我某个地方实现它了吗? 解决方案 某些系统可能会提供execvpe(). Google搜索
..
我正在尝试使用ubuntu 12上的终端进行编译: #include #include main() { / *声明参数数组* / char * args [2]; args [0] =“ / bin / bash”; args [1] = NULL; execve(args [0],args,NUL
..
我正在为一个学校项目工作,我不确定我尝试解决该问题的方法是否可行.该项目涉及编写一个程序,派生2个孩子,然后必须用其他程序替换他们的pid,并使2个孩子通过使用read()和write()通过管道进行交谈. 我的问题是使用execve并将管道通过传递给那个孩子.我现在所拥有的是这样: 父程序-分叉并让子调用execve: #include #include
..
我有以下示例程序: #include int main(int argc, char ** argv){ char buf[100]; printf("Please enter your name: "); fflush(stdout); gets(buf); printf("Hello \"%s\"\n", buf);
..
我们在解释老师方面遇到很多麻烦.我们要求澄清,并从他那里得到了以下答复 对于execve,向其发送一个使用导出的变量设置的环境,并创建一个内置命令以生成/bin/bash的子外壳,这样您就可以使用env查看导出的变量. (他正在谈论在这里创建我们自己的环境变量.) 是的,请创建您自己的.您可以从启动外壳程序时复制环境开始,然后仅添加导出的变量 这与我的以下有关Stack O
..
我正在尝试使用execve执行以下操作:/bin//nc -lnke /bin/bash -p 4444 阅读execve的手册页时,我看到以下要求: int execve(const char *filename, char *const argv[], char *const envp[]); 我遇到的问题是将参数推到argv;我不明白您如何
..
我想使系统在没有setuid和文件"+ p"功能的情况下可用,并且通常没有在设置使用这种方法(init设置PR_SET_NO_NEW_PRIVS和基于文件系统的功能提升不再可能),您不能“重新填充"您的功能,而只需要注意不要“散布"它们. 如何在不“散布"任何授予的功能(例如,新程序的文件为setcap =ei)的情况下如何进行其他操作?只是“我相信这个新过程就像我相信自己一样".例如,为用
..