PDA

View Full Version : اسمبلی در C#



ESG_Esfahan
پنج شنبه 06 بهمن 1384, 00:26 صبح
من برای گرفتن شماره سریال سخت افزار سیستم برنامه ای به زبان اسمبلی دارم که می خواهم از آن در #C استفاده کنم.

لطفا مرا راهنمایی کنید.:متفکر:

تشکر:تشویق:

Mehdi Asgari
پنج شنبه 06 بهمن 1384, 15:31 عصر
برنامه ات رو بذار اینجا ، اگه قابل inline کردن در C++ بود ، میتونیم از MC++ کمک گرفته و از C# اون رو فراخوانی کنیم

ESG_Esfahan
دوشنبه 10 بهمن 1384, 01:21 صبح
کد اسمبلی را به صورت زیر در دلفی اسفاده کردم.


var
_eax, _ebx, _ecx, _edx: Longword;
b: Byte;
s, s1, s2, s3 : string;
begin
asm
mov eax,1
db $0F,$A2
mov _eax,eax
mov _ebx,ebx
mov _ecx,ecx
mov _edx,edx
end;
s := IntToHex(_eax, 8);
asm //determine the serial number
mov eax,3
db $0F,$A2
mov _ecx,ecx
mov _edx,edx
end;
s1 := IntToHex(_edx, 8);
s2 := IntToHex(_ecx, 8);
Insert('-', s, 5);
Insert('-', s1, 5);
Insert('-', s2, 5);

edit1.text:=' - ' + 'Serial Number: '+s+ '-' + s1 + '-' + s2;
s2 := s2 + chr(b);

این کد شماره سریال CPU را به ما میدهد.
ممنون میشم اگر سریع پاسخ را ارسال کنید:متفکر:

با تشکر

anubis_ir
دوشنبه 10 بهمن 1384, 09:38 صبح
یک راه حل : در دلفی تبدیلش کن به dll‌ و در سی شارپ فراخوانی کن.

ESG_Esfahan
سه شنبه 11 بهمن 1384, 00:35 صبح
یک راه حل : در دلفی تبدیلش کن به dll‌ و در سی شارپ فراخوانی کن.


من دلفی زیاد کار نکردم . میشه بگی چطوری این کار را انجام بدم .

ممنون مهندس :تشویق:

anubis_ir
سه شنبه 11 بهمن 1384, 07:24 صبح
پروژه dll‌ دلفی:

library cpu;

uses
SysUtils;

{$R *.res}


function getCPUSerial():Pchar;
var
_eax, _ebx, _ecx, _edx: Longword;
s, s1, s2 : string;
begin
asm
mov eax,1
db $0F,$A2
mov _eax,eax
mov _ebx,ebx
mov _ecx,ecx
mov _edx,edx
end;
s := IntToHex(_eax, 8);
asm //determine the serial number
mov eax,3
db $0F,$A2
mov _ecx,ecx
mov _edx,edx
end;
s1 := IntToHex(_edx, 8);
s2 := IntToHex(_ecx, 8);
Insert('-', s, 5);
Insert('-', s1, 5);
Insert('-', s2, 5);

Result := Pchar(s+ '-' + s1 + '-' + s2);
end;

exports getCPUSerial name 'getCPUSerial';


begin
end.


نحوه استفاده در سی شارپ:



[DllImport("cpu.dll", CallingConvention = CallingConvention.StdCall, CharSet=CharSet.Ansi)]
static extern string getCPUSerial();

private void btnGet_Click(object sender, EventArgs e)
{
txtRes.Text = getCPUSerial();
}

ESG_Esfahan
پنج شنبه 13 بهمن 1384, 01:26 صبح
خیلی ممنون .
راه حل خیلی خوبی بود!!!

-------------------------------
غافل مباش ار عاقلی دریاب گر صاحبدلی
باشد که نتوان یافتن دیگر چنین ایام را