Tag: libc

“f”代表C标准库函数名称是什么?

f代表C标准库函数的名称是什么? 我注意到很多函数的名字都有f ,这对我来说并没有多大意义。 例如: fgets , fopen , printf , scanf , sqrtf等。

为什么argv参数execvp不是const?

因此定义了execvp: int execvp(const char *file, char *const argv[]); 这使得诸如此类的代码无法使用: const char* argv[] = {“/bin/my”, “command”, “here”, NULL}; execvp(argv[0], argv); 这是意外遗漏吗? 围绕这个const_cast是否安全? 或者一些execvp实现实际上是在那个内存上涂鸦?

Solaris 11 / Illumos / OmniOS:哪个软件包有/usr/include/sys/types.h?

Ubuntu的等价物是libc6-dev ,但我似乎无法在Solaris上找到它? 如何在Solaris或Illumos上获取用于构建包的types.h和相关文件?

在Rust中初始化sigset_t

我正在尝试更多地了解Rust中的FFI以及与C库(特别是libc )的链接。 在我的“任务”中,我遇到了以下问题。 C中的正常模式 void(* sig_set(int sig, void(*handler)(int))) { // uninitialized sigaction structs struct sigaction new_action, old_action; // assign options to new action new_action.sa_flags = SA_RESTART; new_action.sa_handler = handler; sigemptyset(&new_action.sa_mask); if(sigaction(sig, &new_action, &old_action) < 0) { fprintf(stderr, "Error: %s!\n", "signal error"); exit(1); } return old_action.sa_handler; } 在Rust中尝试 fn sig_init(sig: i32, handler: fn(i32)->()) -> usize { […]

gets()函数和输入中的’\ 0’零字节

如果从文件读取零字节( ‘\0’ ),来自C语言的gets()函数(例如来自glibc)是否会停止? 快速测试: echo -ne ‘AB\0CDE’ 谢谢。 PS这个问题来自这个问题的评论: 回归libc – 问题 PPS gets函数是危险的,但这是一个关于这个函数本身的问题,而不是关于任何人是否应该使用它。

s = 0是什么意思?

我正在研究bsd的libc函数strtok的代码,当我在我的机器上运行时,程序在s[-1] = 0接收信号SIGSEGV 。 这是代码的链接 。 s[-1] = 0对吗? 这是我的代码: #include #include #include “strtok.c” int main(int argc, char* argv[]) { char* str = “xxxx xxxyy fdffd”; const char* s = ” “; char* token = strtok(str, s); while (token != NULL) { printf(“%s\n”, token); token = strtok(NULL, s); } return 0; }

编写一个返回libc攻击,但libc在内存中加载到0x00

我正在为我的系统安全类编写一个返回libc攻击。 首先,易受攻击的代码: //vuln.c #include #include int loadconfig(void){ char buf[1024]; sprintf(buf, “%s/.config”, getenv(“HOME”)); return 0; } int main(int argc, char **argv){ loadconfig(); return 0; } 我想使用返回libc攻击。 编译和调试程序: $ gcc -g -fno-stack-protector -o vuln vuln.c $ gdb vuln (gdb) break loadconfig (gdb) run Reached breakpoint blah blah blah. (gdb) p $ebp $1 = (void *) 0xbfffefb0 (gdb) […]

是否有任何普通的理由使用open()而不是fopen()?

经过相当长的一段时间后,我正在C做一个小项目。 这些碰巧包括一些文件处理。 我在各种文档中注意到有返回FILE *句柄的函数和返回(小整数)描述符的其他函数。 这两组function都提供了我需要的基本服务,所以我使用它并不重要。 但我对collections智慧感到好奇:使用fopen()和朋友,还是open()和朋友更好? 编辑因为有人提到缓冲与未缓冲和访问设备,我应该补充说,这个小项目的一部分将在FUSE下编写用户空间文件系统驱动程序。 因此,文件级访问可以像在“文件”(即图像)上那样容易地在设备(例如CDROM或SCSI驱动器)上。

stdarg.h在哪里?

在我的系统上(Mac OS 10.6) /usr/include/stdarg.h是: /* This file is public domain. */ /* GCC uses its own copy of this header */ #if defined(__GNUC__) #include_next #elif defined(__MWERKS__) #include “mw_stdarg.h” #else #error “This header only supports __MWERKS__.” #endif 那么,如果GCC使用自己的stdarg.h副本,它在哪里呢? 我不知道#include_next意味着什么(可能是GCC扩展?),也不知道“MWERKS”(编译器?)。

malloc和calloc是如何以不同的签名结束的?

可能重复: 为什么calloc接受两个参数而malloc只有一个? 有很多资源描述了malloc和calloc之间的function差异,但是我不能轻易找到描述不同function签名背后的历史的资源: void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); 当然,前者的大小是每个成员的大小。 也许这个想法是可以通过操作系统懒惰地完成多页面大小的成员大小的calloc? (我可以弥补原因以及下一个人 – 没有引用来源没有接受的答案。:-)