Tag: 低级别

什么在堆栈内?

如果我运行程序,就像 #include int main(int argc, char *argv[], char *env[]) { printf(“My references are at %p, %p, %p\n”, &argc, &argv, &env); } 我们可以看到这些区域实际上在堆栈中。 但还有什么呢? 如果我们在Linux 3.5.3中运行所有值的循环(例如,直到segfault),我们可以看到一些奇怪的数字,以及由一堆零分隔的两个区域的种类,可能是为了防止覆盖环境变量偶然。 无论如何,在第一个区域必须有很多数字,例如每个函数调用的所有帧。 我们怎样才能区分每个帧的结尾,参数在哪里,如果编译器添加了一个金丝雀,返回地址,CPU状态等等?

如何制作可启动程序?

所以,这个问题可能看起来很奇怪,但是让我说我​​编译: int main(void) { int x = 3; int y = 4; int z = x + y; } 有可能让CPU运行吗? 怎么样? 例如,这会让我写信给监视器吗? (如果我没记错的话,你可以在内存中写下要显示的内容。)

更安全的C标准库替代品

在I / O安全方面,C标准库非常差。 许多函数都有缓冲区溢出( gets , scanf ),或者如果没有给出正确的参数( scanf ),就可能破坏内存,依此类推。 每隔一段时间,我就会遇到一个有进取心的黑客,他自己编写了一个缺乏这些缺陷的库。 你见过的这些图书馆有哪些最好的? 您是否在生产代码中使用过它们,如果是这样,那么它们不仅仅是业余爱好项目?

GCC中是否有固定大小的整数?

在MSVC ++编译器上,可以对特定大小的整数使用__int8 , __int16 , __int32和类似类型。 这对于需要使用低级数据结构(如自定义文件格式,硬件控制数据结构等)的应用程序非常有用。 我可以在GCC编译器上使用类似的等价物吗?

如何在Raspberry Pi上运行没有操作系统的C程序?

我想尝试将Raspberry Pi用于一些不同的低级嵌入式应用程序。 唯一的问题是,与可用的AVR和PIC微控制器板不同,Raspberry Pi通常运行一个操作系统(如Raspbian),它在所有正在运行的程序中分配CPU时间,并使其对某些实时应用程序不切实际。 我最近了解到,假设你有一个像GRUB一样的bootloader,在x86上运行一个C程序(以内核的forms)只需要很少的实际设置,只需要一个汇编程序来调用main函数和实际的C代码。 有没有办法用Raspberry Pi实现这一目标? 这是学习低级ARM编程的好方法,它已经有一些复杂的外围设备(USB,以太网等)