全局偏移表(ELF)的结构是什么样的。我想了解动态链接。任何人都可以告诉我们数据结构是什么样子的吗?我不知何故从未在网上找到过它。
我正在编写一个单片操作系统(将它称为操作系统是一个笑话,但它确实有非常小的,学校级功能主义者).当我说单片时,我的意思是,它被编译为单个二进制blob并且不支持文件系统等.目前我只有一个基本的简单用户空间,这只是无限循环.
我打算让我的操作系统变得更有用,并希望能够编写用户应用程序,这些应用程序可以在完整的操作系统上像常规应用程序一样终止.
我没有glibc或同等的.我在用户空间中的当前库是我编写的代码.现在我的问题是如何为用户空间应用添加一个框架,这将使它们终止于一个修复点.
我知道如何在常规系统上编译程序以及程序终止时会发生什么.但是,在我的情况下,我没有奢侈的编译程序对库,如果一个程序终止,那么我的指令指针只是疯狂的绕道而行.
目前我正在制作所有应用程序以进行"回访",并且我使用修复地址预先填充应用程序堆栈(在启动期间).有没有更好的方法来处理这个问题?
除了答案,我非常乐意清楚一些操作系统概念.
我正在使用x86模拟器平台并静态编译我的二进制文件.(我确实有虚拟内存支持)
我正在为linux编写一个控制台驱动程序,我遇到了我需要为此驱动程序设置的tty接口.我对tty驱动程序如何与低级驱动程序绑定感到困惑.
很多时候,根文件系统已经包含很多tty设备.我想知道低级设备如何绑定到根文件系统上的一个现有tty节点.
例如,/dev/tty7:根文件系统上的节点.
低级设备驱动程序如何与此节点连接?或者该低级设备是否应该定义一个全新的tty设备?
我试图将用户空间库链接到Windows内核驱动程序.它引用了__iob_func,它是"libcmt.lib"(用户空间库)的一部分.我无法在winddk中访问此功能.所以,我打算为__iob_func定义一个存根,它将尝试模拟与用户空间库中相同的功能.
有谁知道__iob_func做什么?我在头文件中找到了函数的声明.但我不确定它究竟做了什么功能.
我想在#pragma里面使用#define.我正在做这样的事情:
// I assume this is a correct syntax. Please point out if it is wrong
#define COVERAGE(x) _Pragma (Coverage_tool #x)
Run Code Online (Sandbox Code Playgroud)
然后在我使用它的代码里面
COVERAGE(off) or COVERAGE(on).
Run Code Online (Sandbox Code Playgroud)
这里打开和关闭是字符串.
但是当我这样做时,我得到一个编译错误说 "expected ) near off".
我也试过"off"/ "on"用引号(常规字符串.)但仍然是同样的错误.
不知道是什么问题?
我想在其中一个头文件中定义一个宏.我可以通过makefile设置它吗?
例如,我想设置一个宏"PAGING_ON",我想成为源文件的预处理器宏.(项目在C中.)是否可以通过Makefile设置它?
我需要在我正在使用的系统上发送一个 nmi。我想测试一些我已经实现的东西。是否有任何 Windows 驱动程序例程允许我们这样做?我想我可以使用 __outword 写入端口。有没有其他方法可以做到?
我还有一个问题。是否有任何导致 NMI 的特定情况?(但是,我不希望系统出现 BSOD 或三重故障。)
谢谢
我正在编写一些自定义应用程序,并允许在linux内核中更改中断处理程序代码.
我有一个等待中断发生的用户线程.如果发生中断,那么我想要做的第一件事就是执行该用户线程.
有没有办法让它发挥作用.
谢谢
我运行一个小守护进程,并希望它在被杀死时重生.我在linux系统的inittab中使用"respawn"选项.(这是一个小型的嵌入式平台.).
现在我在BSD上尝试相同的守护进程.我把我的条目放在"rc.d"中.但我找不到BSD的respawn选项.
我可以编写一个重新生成守护进程的小程序.但我想知道是否必须为BSD构建一些东西来重启已杀死的服务.
你知道我能用什么吗?
谢谢
PS我知道我可以在我的守护进程中做这件事.但目前我没有它的来源.
我一直在为Windows做一些黑客攻击,当我做SIDT时遇到了一个事实.当我读SIDT时,我发现IDT限制的值是0xFFF(u4096).
我很惊讶地发现它.我的印象是最大描述符数是256.那么IDTR限制为何是0xFFF?
我的系统是I7在64位运行Win 7.
谢谢.
我有一个简单的程序,我有一些用于位操作的宏.
其中一个宏转换为以下
unsigned long val = 1 << 0x1f;
Run Code Online (Sandbox Code Playgroud)
在这里,我得到输出为`
val = 0xffffffff80000000;
Run Code Online (Sandbox Code Playgroud)
我知道它是某种int溢出.我对最终结果的部分感到困惑.为什么结果会成为我得到的结果?
(我确实理解这里因为某种原因,1被视为int,而当左移使得它为负int.但是我对于类型转换感到困惑.)