Fil*_*erg 5 .net c# vb.net assembly inline-assembly
假设我们在这个答案中使用NASM:如何在windows下的汇编中编写hellow world.
关于汇编,我得到了一些关于c#或任何其他.net语言的想法和问题.
首先,我希望能够创建一个具有以下带有HelloWorld此参数的函数的库:
在C#中,方法签名会像这样解释:void HelloWorld(string name)它会打印出像这样的东西
Hello World来自名字
我已经搜索了一下但是找不到那么好的和干净的材料让我开始.我之前知道一些基本的装配gas.
因此,正确方向的任何指针都非常适用.
把它们加起来
奖金功能
在程序集或c中创建库时,您确实遵循某种"预定义"方式,即c调用对话,是否正确?
Cod*_*ous 11
像这样的东西应该让你一个工作的DLL:
extern _printf
section .text
global _hello
_hello:
push ebp
mov ebp, esp
mov eax, [ebp+12]
push eax
push helloWorld
call _printf
add esp, 8
pop ebp
ret
export _hello
helloWorld: db 'Hello world from %s', 10, 0
Run Code Online (Sandbox Code Playgroud)
然后你只需要使用P/Invoke调用'hello'函数.它不会自行清理,所以你需要将CallingConvention设置为Cdecl; 你还需要告诉它你正在使用ANSI字符串.未经测试,但它应该工作正常.
using System.Runtime.InteropServices;
namespace Test {
public class Test {
public static Main() {
Hello("C#");
}
[DllImport("test.dll", EntryPoint="hello", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
public static extern Hello(string from_);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |