Tag: macos

OS X Yosemite上的Valgrind,出现虚假错误?

我正在跟随学习C艰难的方式 ,我正在练习4:介绍Valgrind 。 我在Mac OS X Yosemite上,在撰写本文时,没有稳定的Valgrind for Yosemite版本。 我找到了Yosemite和Valgrind,并使用了最高投票回答brew install –HEAD valgrind 。 这个安装了Valgrind和我能够跟随Zed的练习。 但是,当我“修复”应用程序时,我仍然遇到错误。 为了仔细检查,我回到练习3 ,这应该没有错误,但我仍然在Valgrind中出错。 这是代码,然后是输出: ex3.c #include int main() { int age = 10; int height = 72; printf(“I am %d years old.\n”, age); printf(“I am %d inches tall.\n”, height); return 0; } 在iTerm中: ransom:learn-c-the-hard-way ben$ rm -f ex3 ransom:learn-c-the-hard-way ben$ […]

Mac OS X上的Valgrind错误对于printf来说是双倍的

目前,我正在学习C语言,这是一个很棒的学习代码 。 我遇到了以下情况: 我编译以下代码,一切对我来说都很好: #include int main(int argc, char *argv[]) { int bugs = 100; double bug_rate = 1.2; printf(“You have %d bugs a the imaginary rate of %f!\n”, bugs, bug_rate); return 0; } 它也正常工作。 当我现在运行Valgrind(3.11.0; 应该更新为OS X El Capitan )时,我得到以下消息: ==18896== Memcheck, a memory error detector ==18896== Copyright (C) 2002-2015, and GNU GPL’d, by […]

如何在OSX上安装gtk以与g ++ / gcc编译器一起使用

我已经在apple.stackexchange.com上问了这个问题,但是我被告知这个问题是错误的 – 所以我会在这里问一下,正如我的建议那样。 在我的大学,我们完成了实施具有GTK-GUI的c程序的任务。 GTK-GUI已经实现,我们只需要实现一个算法来提供一些数据。 我已经有gcc / g ++了。 但是当我尝试编译项目时,编译器返回错误,它没有找到gtk: fatal error: ‘gtk/gtk.h’ file not found #include ^ 所以我的问题是:如何在OSX Mavericks上安装gtk以便将它与gcc / g ++编译器一起使用? 我的设置:MacBook Pro Retina Mid 2012与OSX Mavericks。 Homebrew已安装并正常工作,如果它对安装有用。 (当然安装了Apple Command Line开发者工具)

Mac解决方案“安全”替代“不安全”的C / C ++标准库函数?

什么是Mac上最好的一站式“安全”C库解决方案? 我在“安全”/“不安全”上使用引号,因为关于某些标准库函数或其推定改进的替代方案的好处存在很多争议。 由于可能存在缓冲区溢出或其他安全问题,许多传统的标准C库函数(例如, vfprintf )被认为是不安全的。 在Windows上,Microsoft C / C ++编译器提供 “_s”函数(例如, vfprintf_s )作为标准库调用的更安全的替代方法。 这些function不是直接替换,因为它们具有提供附加安全信息(例如,缓冲区长度)所必需的不同签名。 它们还提供其他function,例如无效的格式字符串检测,不同的文件安全性等。据我所知,这种实现在Mac上不可用。 Apple(或第三方)是否在OSX上提供与GCC类似的任何内容? 特别是,我正在寻找至少以下function的“安全”实现: fopen vfprintf vsprintf sprintf strncpy strcpy strcat 请注意:这个问题与Mac有关。 我不是在征求你对微软实施的看法(除非它在Mac上可用。)虽然其中一些function可能很容易自己编写,但并非所有function都可以。 我不是在问自己如何写这些。 我不是要求有关如何使用STL类来做到这一点的提示。 我不是在问如何关闭警告。 我的特殊需求非常具体。 我正在尝试确定最佳实践Mac API,它与传统的C库调用尽可能相似,同时增加了安全性。 当然,在Mac和Windows(以及其他操作系统)上运行的便携式实现会更好。

有没有办法检查进程是64位还是32位?

我试图从进程pid中找到进程类型(32位/ 64位)? 我使用此处描述的GetBSDProcessList方法获取进程信息和进程列表。 我们如何获取流程类型信息? 有任何想法吗? 我可以使用已定义的( i386 )或已定义的( x86_64 ),但前提是我们正在处理中。 我不在这个过程中。

OSX上的键盘输入

我想知道是否有可能从某个地方读取OSx上的键盘输入,例如带有/ dev / input文件的GNU / Linux。 这样做的目的是制作一个非常简单的键盘记录器,(学习目的),或者如果有一个我可以在C中调用的function。 谢谢。

Mac OS X上的奇怪RAW套接字

当我在Mac OS X上运行一个用C编码的简单数据包嗅探器时,我根本没有输出,这是一个奇怪的事情! 有人可以帮我理解发生了什么。 #include #include #include #include #include #include int main(void) { int i, recv_length, sockfd; u_char buffer[9000]; if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) { printf(“Socket failed!!\n”); return -1; } for(i=0; i < 3; i++) { recv_length = recv(sockfd, buffer, 8000, 0); printf("Got some bytes : %d\n", recv_length); } return 0; } […]

DYLD_LIBRARY_PATH和DYLD_INSERT_LIBRARIES无法正常工作

我创建一个.dylib文件并编译它: #define _GNU_SOURCE #include #include static void* (*real_malloc)(size_t); void *malloc(size_t size) { void *p = NULL; fprintf(stderr, “malloc(%zd) = “, size); p = real_malloc(size); fprintf(stderr, “%p\n”, p); return p; } void __attribute((constructor))init() { real_malloc = (decltype(real_malloc))dlsym(RTLD_NEXT, “malloc”); if (NULL == real_malloc) { fprintf(stderr, “Error in `dlsym`: %s\n”, dlerror()); return; } } 然后我创建一个调用malloc的测试程序。 我确保对malloc的调用没有进行优化。 接下来我运行以下内容: DYLD_PRINT_LIBRARIES=1 […]

在Mac OS X Snow Leopard中禁用ASLR

基本上我想在Mac OS X Snow Leopard中禁用ASLR并使用gcc todo一些缓冲区溢出和堆栈溢出。 有谁知道如何禁用ASLR?

处理C中的特殊字符(UTF-8编码)

我正在用C编写一个小应用程序来读取一个简单的文本文件,然后逐个输出这些行。 问题是文本文件包含特殊字符,如Æ,Ø和Å等。 当我在终端中运行程序时,这些字符的输出用“?”表示。 有一个简单的解决方案吗?