我想从我的.asm文件中执行一个shell脚本(完全如下面的代码所示),但是可以在assembly中找到以下行的替代方法。我正在使用masm611来汇编和编译文件。 / p>
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "myscript.sh";
proc.Start();
答案 0 :(得分:2)
首先,你不说哪个架构;所以这是无法回答的。一个简单的解决方案应该是在C中编写代码,然后编译成汇编代码 - 这是所有流行的C编译器都有的交换机,AFAIK - 然后只需移植到您自己的代码,链接到适当的库。
免责声明:我不参加集会。
答案 1 :(得分:0)
由于您的示例是在.NET中并且您提到MASM,我假设您在Windows上工作。在Windows上,您可以使用Win32 API启动进程,也可以使用C RTL。无论哪种方式,您都必须链接到静态(.lib)库并调用函数。在Win32 API中,ShellExecute()
是最容易使用的(CreateProcess()
,但是调用序列很痛苦)。在RTL中,有_execl()
及其亲属。阅读使用汇编中的静态库。
.NET代码,就像您提到的Process.Start()
内容一样,根本不会转换为x86程序集。
我可以问为什么必须从汇编中完成这项工作? “汇编”和“shell脚本”很少一起出现。注意:在Windows上,shell脚本具有.bat或.cmd扩展名。另一方面,.sh是* nix或MacOS的特征。