system-calls相关内容

64位Windows中的程序集系统调用

我使用的是Windows 10,安装了Cygwin。我一直在使用Cygwin编译/汇编c语言程序和使用Cygwin安装的“GCC”和“NASM”汇编程序。据我所知,NASM有一个-f win64模式,所以它可以汇编64位程序。现在,对于Windows上的x64汇编编程,YouTube似乎缺乏教程。YouTube上的大多数汇编编程教程要么适用于x64 Linux,要么适用于x32 Windows,我 ..
发布时间:2022-08-14 13:00:48 其他开发

获取固定驱动器列表

如何才能仅获取实体驱动器的所有装入点的列表?我看到这里有类似的答案,但它列出了包括网络共享在内的所有装入点。 How can I get a listing of all drives on Windows using golang? 推荐答案 好了,我已决定重拾Win32API编程技能并准备解决方案。 基于the thread you referred to中的LAME方 ..
发布时间:2022-07-17 17:44:46 其他开发

Syscall在ASM中的引用

https://www.cs.fsu.edu/~langley/CNT5605/2017-Summer/assembly-example/assembly.html 我看到类似下面的例子。但我找不到Syscall的手册。例如,60表示退出,1表示写入。是否有针对所有系统调用的完整手册(包括调用编号和参数含义)? global _start section .text ..
发布时间:2022-07-17 17:22:29 服务器开发

如果不将0作为execve的环境指针传递,为什么这个外壳代码会起作用?

https://www.exploit-db.com/exploits/46907 我的理解是,由于x64调用约定,execve的第三个参数envp应该存储在RDX中。但是这个外壳代码不会将该寄存器置零,它只会将RSI寄存器(存储ARV)置零。因此,如果RDX的当前值未指向有效位置,则会导致段错误,不是吗? 我是否遗漏了什么? 推荐答案 写rdx(带0):注意syscall ..
发布时间:2022-04-18 11:05:29 服务器开发

Linux内核中绝对路径的相对路径

我在收集挂钩sys_open和sys_execve的参数时遇到了一些困难。 两个系统调用都使用文件名作为第一个参数,参数可以是绝对路径或相对路径。我想要获取绝对路径,无论它是绝对路径还是相对路径。 示例: 如果文件名为"/root/Desktop/../Downloads",我需要将其更改为"/root/Downloads"。 我想操作系统源代码是有解析的,但我最后读的是"__ ..

创建一个目录,并返回一个带有`opens`的目录

我希望在C中创建一个文件树,并避免可能的争用条件。我的目的是使用open(3)创建根目录,open将返回一个目录文件描述符(dirfd),我将把它提供给后续的openat(3)/mkdirat(3)调用以创建树。 int dirfd = open(path, O_DIRECTORY | O_CREAT | O_RDONLY, mode); 执行此操作的通常方法是将第一个open调用替换为 ..
发布时间:2022-04-18 11:01:18 服务器开发

哪个系统调用号头文件是正确的?

我最近在做一些内核编码,我发现了2个unistd.h文件。 第一个位置为/usr/include/asm/unistd.h。第二个来自内核的源代码:linux/include/uapi/asm-generic/unistd.h。 源代码的版本与我的内核的版本相同,但两个头文件 彼此不同。 /usr/include/asm/unistd.h(从我的电脑): #define __NR ..
发布时间:2022-04-18 10:58:37 服务器开发

__NR_gettid与系统_gettid的区别

我只是在寻找在Linux中获取唯一线程ID的方法。我发现的方法是使用以下两个参数中的一个作为参数作为syscall:__NR_gettid或SYS_gettid。 有人能解释一下它们之间的区别吗? 推荐答案 无 在中有以下内容: #define SYS_gettid __NR_gettid ..
发布时间:2022-04-18 10:53:29 服务器开发

在不修改内核的情况下拦截系统调用的最小开销方式

我知道拦截系统调用的方法如下。 使用ptrace,但这似乎有很高的开销。据我所知,像strace这样的工具也在内部使用ptrace。 使用内核模块更改系统调用表,但据我所知,这种方法在以后的Linux内核中不再可行。 使用LD_PRELOAD。但是,例如,如果您直接进行系统调用,而没有为该系统调用使用某些包装库函数,则这将不起作用。 所以您可以看到上面提到的所有方法都有缺陷。因此, ..
发布时间:2022-04-18 10:50:30 服务器开发

将strace命令的输出打印为文本文件

我需要将以下命令的结果写入文本文件,但此命令不起作用,并且在使用cat output.txt时不显示任何内容。 请帮我纠正这个问题好吗? strace -r -y -e read Program -l -o output.txt 谢谢 推荐答案 为了将来参考,我认为此人应该这样运行它: strace -o outputfile.txt ./Program ..
发布时间:2022-04-18 10:49:10 服务器开发

为什么从_start返回段错误?

我尝试将代码不在main函数中,而是直接放入_start: 段 .text全局_start_开始:推rbpmov rbp, rsp;... 程序逻辑 ...离开ret 编译: yasm -f elf64 main.sld -o main main.o 运行: ./main分段错误(核心转储) 我看了,离开是 mov esp,ebp流行音乐 但是,为什么弹出堆栈帧的结尾和设置的基帧 ..
发布时间:2022-01-22 12:19:47 其他开发

在 64 位 Linux 上使用中断 0x80

我有一个简单的 64 位汇编程序,旨在打印一个 'O' 和 'K' 后跟一个换行符. 但是,“K"永远不会被打印出来.程序的目标之一是将 rax 寄存器的低位中的值打印为 ASCII 字母.该程序专为 64 位 Linux 编写,用于教育目的,因此无需使用 C 风格的系统调用. 我怀疑问题出在 mov QWORD [rsp], rax 或 mov rcx, rsp. 目前,程序仅 ..
发布时间:2022-01-22 12:13:10 服务器开发

程序打开特定文件时 gdb 中断

背景故事:在 strace 下运行程序时,我注意到 '/dev/urandom' 正在被 open'ed.我想知道这个调用来自哪里(它不是程序本身的一部分,它是系统的一部分). 所以,使用 gdb,我试图在发出 open 调用时中断(使用 catch syscall open)程序执行,因此我可以看到回溯.问题是 open 被调用了 alot,大概有几百次,所以我无法缩小打开/dev/ura ..
发布时间:2022-01-20 20:23:21 服务器开发

ARM inline asm:退出系统调用并从内存中读取值

问题 我想在 Linux Android 设备上使用内联汇编在 ARM 中执行退出系统调用,并且我希望从内存中的某个位置读取退出值. 示例 如果不提供这个额外的参数,调用的宏如下所示: #define ASM_EXIT() __asm__("mov %r0, #1\n\t"\“mov %r7, #1\n\t"\“swi #0") 这很好用.为了接受一个论点,我将其调整为: ..
发布时间:2022-01-17 14:14:59 服务器开发

系统调用包装 asm C

有人可以向我解释一下这段代码吗?另外请给我一些链接/URL,我可以在其中了解更多信息?此代码用作包装器来覆盖我们库中的“extern int errno".有人可以解释一下这个函数,并告诉我为什么在某些系统调用中需要包装器吗?哪些也称为 WeakSYSCALLS? #define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)#define ASM_ARGS_2 ASM_ARG ..
发布时间:2022-01-17 14:09:58 其他开发