PDA

View Full Version : ذخیره کردن تابع در یک فایل



taze kar
یک شنبه 15 آبان 1384, 19:12 عصر
با سلام

فرض کنید که یه برنامه در حال اجرا داریم ( مثلا" برنامه ای که خودمون نوشتیم ) و ادرس یکی از تابع ها یی رو که توی این برنامه هست رو هم داریم ..... حالا چه جوری میتونیم که فقط کد های همین تابع رو توی یک فایل دیگه ذخیره کنیم ؟


ممنون ......

seyedof
یک شنبه 15 آبان 1384, 19:56 عصر
سلام
هنگام اجرای تابع فوق در اول و آخر اوون مقدار رجیستر IP رو یه جایی نگهداری کنید بعد باید یه جوری کد سگمنت رو Lock کرده و محتویات این آدرس رو توی فایل بریزید.
ممنون علی

taze kar
یک شنبه 15 آبان 1384, 20:41 عصر
سلام .
یعنی یه جورایی باید اسمبلی بنویسم ؟

seyedof
دوشنبه 16 آبان 1384, 17:35 عصر
DWORD dwAddressStart = 0 ;
DWORD dwAddressEnd = 0 ;
asm {
call label1
label1:
pop dwAddress

mov ebx,2
mov eax,1000
mul ebx
xor ecx,ecx
mov edx,ecx

call label2
label2:
pop dwAddressEnd
} ;

DWORD dwCodeSize = dwAddressEnd - dwAddressStart ;
BYTE *pCode = new BYTE [ dwCodeSize ] ;
ZeroMemory ( pCode , dwCodeSize ) ;
CopyMemory ( pCode , (BYTE*)dwAddress , dwCodeSize ) ;

taze kar
شنبه 12 آذر 1384, 09:10 صبح
سلام ...
حالا چه جوری میتونیم اندازه یک تابع رو بدست بیاریم ... ؟ ( مثلا چند بایت طول دستوراتش هست ؟)

ممنون

aakh1361
شنبه 12 آذر 1384, 17:00 عصر
کدی که اون زبون باهاش نوشته شده رو بهتون نمی ده( پاسکال یا سی )ولی کد اسمبلیش رو میتونید بدست بیارید برای اینکار هم میتونی از Denuger ها استفاده کنی که بعضیشون چنین قابلیتی دارند که از یک جای حافظه تا جای که شما مشخص کردید کد اسمبلیش رو تو یک فایل بریزند

seyedof
یک شنبه 13 آذر 1384, 09:48 صبح
سلام ...
حالا چه جوری میتونیم اندازه یک تابع رو بدست بیاریم ... ؟ ( مثلا چند بایت طول دستوراتش هست ؟)

ممنون

DWORD dwCodeSize = dwAddressEnd - dwAddressStart

taze kar
یک شنبه 13 آذر 1384, 12:06 عصر
سلام ...
ممنون از این که وقت گذاشتید ...
آقای SEYEDOF منظور من انداازه کل تابع بود ... یعنی کد به اضافه مقدار حافظه ای که برای متغیر ها و پارامتر های توی پشته استفاده میشه ...
و یه چیز دیگه این که چه جوری میشه آدرس دقیق تابع رو بدست آورد ؟ ... چون با این کدی که شما نوشتید نمیشه به طور دقیق محل اتمام تابع رو بدست آورد ...
و یه مطلب دیگه این که چه جوری میشه محتوای رجیستر EIP رو مستقیما" و بدون استفاده از پشته تغییر داد ؟ (منظورم دستور اسمبلی ...)

ببخشید اگه سرتون رو درد اوردم ...
ممنمون ( خیلی خیلی زیاد)

aakh1361
دوشنبه 14 آذر 1384, 01:20 صبح
چه جوری میشه محتوای رجیستر EIP رو مستقیما" و بدون استفاده از پشته تغییر داد ؟ (منظورم دستور اسمبلی ...)

روش دیگه ای نداره