ورود

View Full Version : سوال: استفاده از dll در اسمبلی



[REVEX]
شنبه 20 مهر 1387, 12:00 عصر
با سلام
من قصد دارم یه dll رو تو اسمبلی Load کنم،و مقدار بازگشتی از dll که 0 یا 1 هست رو در برنام استفاده کنم.
نکته:این کارو در vc++6 با این کد انجام دادم:

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"

int main(int argc, char* argv[])
{
HINSTANCE LoadMe;
LoadMe = LoadLibrary("Project1.dll");
typedef unsigned char (__stdcall *CreateFn)();
CreateFn LibMEP;
unsigned char x;
LibMEP = (CreateFn)GetProcAddress(LoadMe, "func");
x = LibMEP();
getch();
return 0;
}
با تشکر

Mehdi Asgari
شنبه 20 مهر 1387, 12:34 عصر
من این کارو تا حالا نکردم ، ولی فکر کنم باید از Win32 Assembly استفاده کنی. (MASM32 (http://www.masm32.com/))
این سایت (http://win32assembly.online.fr/) رو ببین ، مخصوصا این مقاله رو:
http://win32assembly.online.fr/tut26.html

[REVEX]
شنبه 20 مهر 1387, 14:48 عصر
با تشکر دوست عزیز.
ممنون میشیم اگه دوستانی که تچربه یه همچین کاری رو دارن،راهنمایی کنن

hoax3r
شنبه 20 مهر 1387, 21:04 عصر
این نمونه کد رو بین، فقط قبلش مسیر فایلهای include شده رو درست کن:

[REVEX]
سه شنبه 23 مهر 1387, 00:17 صبح
ممنونم
با کد زیر حل شد،مشکل اصلی من در فراخانی دستور dll بود که حل شد.

PUSH eax
lea eax,[ebp+_p_dllname]
PUSH eax
call _jmp_LoadLibrary
OR EAX,EAX
MOV DWORD PTR DS:[ebp+_p_handel],EAX
lea eax,[ebp+_p_funname]
push eax
mov eax,[ebp+_p_handel]
push eax
call _jmp_GetProcAddress
mov [ebp+_p_handel],eax
CALL DWORD PTR DS:[ebp+_p_handel] <-- مقدار بازگشتی از فراخانی dll در Eax ذخیره میشود

Sir.V65j
سه شنبه 23 مهر 1387, 10:36 صبح
عجب کد عجیبی!! رو همه دی ال ال هایی که تست کردین جواب میده؟
بنظرم یکم تمیز تر از اینم می شه نوشت!
راستی مگه قبل از اینکه اینجا بزاری به جوابت نرسیده بودی؟

[REVEX]
سه شنبه 23 مهر 1387, 14:39 عصر
کجاش عجیبه!
واسه من که درست کارم میکنه...
مقدار بازشگتیش هم کاملا درسته.
البته رو dll های دیگه تست نکردم(چون نیازی نبود)
زمانی که تاپیک رو زدم مشکل داشتم ولی بعد از اینکه مشکل حل شد،کد رو واسته دوستان گذاشتم.