system-calls相关内容
我使用的是Windows 10,安装了Cygwin。我一直在使用Cygwin编译/汇编c语言程序和使用Cygwin安装的“GCC”和“NASM”汇编程序。据我所知,NASM有一个-f win64模式,所以它可以汇编64位程序。现在,对于Windows上的x64汇编编程,YouTube似乎缺乏教程。YouTube上的大多数汇编编程教程要么适用于x64 Linux,要么适用于x32 Windows,我
..
如何才能仅获取实体驱动器的所有装入点的列表?我看到这里有类似的答案,但它列出了包括网络共享在内的所有装入点。 How can I get a listing of all drives on Windows using golang? 推荐答案 好了,我已决定重拾Win32API编程技能并准备解决方案。 基于the thread you referred to中的LAME方
..
以下代码使用RSI寄存器作为循环计数器,将Hello World打印10次。 section .data hello: db 'Hello world!',10 helloLen: equ $-hello section .text global _start _start: mov rsi, 0
..
https://www.cs.fsu.edu/~langley/CNT5605/2017-Summer/assembly-example/assembly.html 我看到类似下面的例子。但我找不到Syscall的手册。例如,60表示退出,1表示写入。是否有针对所有系统调用的完整手册(包括调用编号和参数含义)? global _start section .text
..
我有一个来自信息的文件(Mac Os): Created: Tuesday, 26 May 2020 at 11:21 Modified: 26 May 2021 at 15:40 在做了一些研究之后,我试着去做: ctim := fi.Sys().(*syscall.Stat_t).Ctim atim := fi.Sys().(*syscall.Stat_t).Atim mti
..
https://www.exploit-db.com/exploits/46907 我的理解是,由于x64调用约定,execve的第三个参数envp应该存储在RDX中。但是这个外壳代码不会将该寄存器置零,它只会将RSI寄存器(存储ARV)置零。因此,如果RDX的当前值未指向有效位置,则会导致段错误,不是吗? 我是否遗漏了什么? 推荐答案 写rdx(带0):注意syscall
..
我在收集挂钩sys_open和sys_execve的参数时遇到了一些困难。 两个系统调用都使用文件名作为第一个参数,参数可以是绝对路径或相对路径。我想要获取绝对路径,无论它是绝对路径还是相对路径。 示例: 如果文件名为"/root/Desktop/../Downloads",我需要将其更改为"/root/Downloads"。 我想操作系统源代码是有解析的,但我最后读的是"__
..
我希望在C中创建一个文件树,并避免可能的争用条件。我的目的是使用open(3)创建根目录,open将返回一个目录文件描述符(dirfd),我将把它提供给后续的openat(3)/mkdirat(3)调用以创建树。 int dirfd = open(path, O_DIRECTORY | O_CREAT | O_RDONLY, mode); 执行此操作的通常方法是将第一个open调用替换为
..
我最近在做一些内核编码,我发现了2个unistd.h文件。 第一个位置为/usr/include/asm/unistd.h。第二个来自内核的源代码:linux/include/uapi/asm-generic/unistd.h。 源代码的版本与我的内核的版本相同,但两个头文件 彼此不同。 /usr/include/asm/unistd.h(从我的电脑): #define __NR
..
我正在尝试从一个无根的Golang程序中启动一个新进程,为该进程授予根权限,并使用sudo执行一个命令。但是,我得到了以下输出: sudo: /etc/sudo.conf is owned by uid 65534, should be 0 sudo: /etc/sudo.conf is owned by uid 65534, should be 0 sudo: error in /etc/
..
我只是在寻找在Linux中获取唯一线程ID的方法。我发现的方法是使用以下两个参数中的一个作为参数作为syscall:__NR_gettid或SYS_gettid。 有人能解释一下它们之间的区别吗? 推荐答案 无 在中有以下内容: #define SYS_gettid __NR_gettid
..
我知道拦截系统调用的方法如下。 使用ptrace,但这似乎有很高的开销。据我所知,像strace这样的工具也在内部使用ptrace。 使用内核模块更改系统调用表,但据我所知,这种方法在以后的Linux内核中不再可行。 使用LD_PRELOAD。但是,例如,如果您直接进行系统调用,而没有为该系统调用使用某些包装库函数,则这将不起作用。 所以您可以看到上面提到的所有方法都有缺陷。因此,
..
我需要将以下命令的结果写入文本文件,但此命令不起作用,并且在使用cat output.txt时不显示任何内容。 请帮我纠正这个问题好吗? strace -r -y -e read Program -l -o output.txt 谢谢 推荐答案 为了将来参考,我认为此人应该这样运行它: strace -o outputfile.txt ./Program
..
我有一个适用于64位Linux系统的NASM程序,它可以在标准I/O设备上运行,它看起来是这样的: section .data prompt db "Enter your text: ", 10 length equ $ - prompt text times 255 db 0 textSize equ $ - text section
..
我正在尝试为Kali Linux 2021-W1(Linux内核版本5)上的bind()系统调用设置挂钩,但由于某种原因,调用原始系统调用失败并出现错误。 以下是我的代码: /* includes, license, author... */ void **sys_call_table_addr = (void **) 0xffffffff9e0002c0; int enable_
..
我尝试将代码不在main函数中,而是直接放入_start: 段 .text全局_start_开始:推rbpmov rbp, rsp;... 程序逻辑 ...离开ret 编译: yasm -f elf64 main.sld -o main main.o 运行: ./main分段错误(核心转储) 我看了,离开是 mov esp,ebp流行音乐 但是,为什么弹出堆栈帧的结尾和设置的基帧
..
我有一个简单的 64 位汇编程序,旨在打印一个 'O' 和 'K' 后跟一个换行符. 但是,“K"永远不会被打印出来.程序的目标之一是将 rax 寄存器的低位中的值打印为 ASCII 字母.该程序专为 64 位 Linux 编写,用于教育目的,因此无需使用 C 风格的系统调用. 我怀疑问题出在 mov QWORD [rsp], rax 或 mov rcx, rsp. 目前,程序仅
..
背景故事:在 strace 下运行程序时,我注意到 '/dev/urandom' 正在被 open'ed.我想知道这个调用来自哪里(它不是程序本身的一部分,它是系统的一部分). 所以,使用 gdb,我试图在发出 open 调用时中断(使用 catch syscall open)程序执行,因此我可以看到回溯.问题是 open 被调用了 alot,大概有几百次,所以我无法缩小打开/dev/ura
..
问题 我想在 Linux Android 设备上使用内联汇编在 ARM 中执行退出系统调用,并且我希望从内存中的某个位置读取退出值. 示例 如果不提供这个额外的参数,调用的宏如下所示: #define ASM_EXIT() __asm__("mov %r0, #1\n\t"\“mov %r7, #1\n\t"\“swi #0") 这很好用.为了接受一个论点,我将其调整为:
..
有人可以向我解释一下这段代码吗?另外请给我一些链接/URL,我可以在其中了解更多信息?此代码用作包装器来覆盖我们库中的“extern int errno".有人可以解释一下这个函数,并告诉我为什么在某些系统调用中需要包装器吗?哪些也称为 WeakSYSCALLS? #define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)#define ASM_ARGS_2 ASM_ARG
..