在X86机器上组装,Windows与Linux

jas*_*son 7 x86 assembly virus

它们是一样的吗?

更长的版本:

假设我在汇编时在一台Windows机器上编写了一个小应用程序,它只需添加1 + 1并将其存储在寄存器中.那么,我在Linux机器上编写完全相同的代码.会有用吗?

我想是的,因为在硬件层面,它是同一台机器,所以'硬件的语言'(原谅不精确性)将是相同的.

所以我认为一个针对Windows的病毒,但用汇编编写的内容不会只是一个Windows病毒.

And*_*and 11

病毒肯定需要与操作系统交互,并使用其API.因此,它高度依赖于平台.

此外,可执行文件还有一个标头,这取决于目标操作系统.如果要在Windows中创建一个或多或少空的EXE文件,这将无法在Linux下运行(甚至不启动).

  • 人们已经编写了概念验证蠕虫和病毒,这些蠕虫和病毒通过利用可以预期广泛存在的高级环境,或通过平台检测和运行多平台有效负载的适当部分来运行跨平台.大约10年前有2600篇关于一篇的文章,从那以后我看到了一篇白皮书. (3认同)
  • 1988年的原始Morris蠕虫是多平台的,运行在Vax BSD和太阳上. (2认同)

tyl*_*erl 9

是的,不是.

添加1 + 1并将其存储在寄存器中的小片段将完全相同的机器代码 - 也就是说,无论操作系统是什么,处理器上运行的代码都是相同的.

但是,您需要使用与操作系统交互的其他位来包围该代码,以使您的程序有意义 - 例如2,eax如果您的代码没有输出到某个地方,您将永远不会知道您的代码实际上是否正确存储了.

有趣的是,像Wine这样的项目通过在Linux下提供程序在Windows下可以找到的相同API调用,以及提供适当的逻辑来允许Linux正确解码Windows可执行文件,从而实现跨平台的互操作性.因此,有了Wine支持,一些Windows病毒实际上可以在Windows下运行.这可能需要一些工作,但你可以实现它.

不,Wine不必重新编译Windows程序 - 事实上,它确实直接在处理器上运行存储在EXE中的机器代码.


faz*_*azo 5

在windows上用汇编语言编写的程序与linux不是二进制兼容的......你需要在linux上再次编译(汇编)它们,但请记住汇编程序之间存在差异......它们不同地处理例如声明代码,数据的部分,bss

windoes高管不会在linux上本地运行(你可以在wine中运行它们,但它们将被沙盒化)