Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅通过使用汇编来确定操作系统(linux或windows)?(x86)_Linux_Windows_Security_Assembly_X86 - Fatal编程技术网

如何仅通过使用汇编来确定操作系统(linux或windows)?(x86)

如何仅通过使用汇编来确定操作系统(linux或windows)?(x86),linux,windows,security,assembly,x86,Linux,Windows,Security,Assembly,X86,我想看看是否有可能仅仅通过使用汇编来确定操作系统 我发现的唯一相关问题是: 但它并没有真正回答这个问题。他们说可能没有办法做到这一点,但我对此表示怀疑,考虑到x86体系结构有多庞大,必须有办法(比如查看特殊寄存器值,使用一些鲜为人知的x86指令等等) 基本上,假设您可以编写汇编代码,但事先不知道它将在哪个操作系统上执行(该操作系统中的应用程序将跳转到这个二进制代码块) 现在,您需要检测它是Windows操作系统还是Linux,只是在汇编(x86)中,您将如何做到这一点?诀窍是尽可能减少碰撞的可

我想看看是否有可能仅仅通过使用汇编来确定操作系统

我发现的唯一相关问题是:

但它并没有真正回答这个问题。他们说可能没有办法做到这一点,但我对此表示怀疑,考虑到x86体系结构有多庞大,必须有办法(比如查看特殊寄存器值,使用一些鲜为人知的x86指令等等)

基本上,假设您可以编写汇编代码,但事先不知道它将在哪个操作系统上执行(该操作系统中的应用程序将跳转到这个二进制代码块)

现在,您需要检测它是Windows操作系统还是Linux,只是在汇编(x86)中,您将如何做到这一点?诀窍是尽可能减少碰撞的可能性


(请不要问为什么你不知道你的代码正在执行的操作系统,这不是问题的一部分,只要假设你处于一种你不知道的情况)

这段代码将在哪里运行(即,实际运行它的是什么)?@GaborLengyel目标操作系统中的一个应用程序,如果必要的话,我们也可以假设它在内核模式下运行(内核模式驱动程序)。在某个时刻,应用程序跳转到我们编写的这一二进制x86代码块。首先检测32位或64位模式,然后检查FS寄存器。在指向线程信息块的32位窗口中。在linux中,它最初为零,但可能为TLS设置,在这种情况下,您必须尝试验证TIB。在64位模式下,FS为报告在windows中为非零,但在linux中为零。