PDA

View Full Version : حرفه ای: برنامه مقیم در حافظه



سید یوسف
شنبه 23 مرداد 1389, 01:59 صبح
سلام دوستان می تونید تو نوشتن یک برنامه مقیم در حافظه به زبان سی بهم کمک کنید؟ فرض کنید یه برنامه که ورودی صفحه کلید رو تو یه فایل ذخیره کنه . قسمت خوندن بافر صفحه کلید رو نوشتم ولی نمی دونم چطور تو حافظه مقیمش کنم خواهشا کمکم کنید دعاتون میکنم

سید یوسف
یک شنبه 24 مرداد 1389, 12:05 عصر
منظورتون Keyboard Logger هست ؟


چی رو تو حافظه مقیم کنید ؟
لطفا واضح تر بگید ،
دقیقا همون key logger منظور منه
ولی عمده مشکل من اینه که چطور میشه یه برنامه رو تو حافظه مقیم کرد با اسمبلی تا حدودی میدونم چیکار کنم ولی با c اصلا نمیدونم . میتونید کمکم کنید؟

sasan_vm
یک شنبه 24 مرداد 1389, 13:48 عصر
سلام دوستان می تونید تو نوشتن یک برنامه مقیم در حافظه به زبان سی بهم کمک کنید؟ فرض کنید یه برنامه که ورودی صفحه کلید رو تو یه فایل ذخیره کنه . قسمت خوندن بافر صفحه کلید رو نوشتم ولی نمی دونم چطور تو حافظه مقیمش کنم خواهشا کمکم کنید دعاتون میکنم

اگر درست متوجه شده باشم برای سیستم dos می خواهید این کار را انجام بدهید. پس باید با interrupt ها آشنا باشید.، روش کار ساده است:
باید آدرس interrupt مربوط به فشردن صفحه کلید را از interrupt vector address بدست آورید و ذخیره کنید سپس آدرس جدیدی را به آن اختصاص دهید که همان آدرس تابع شما است، تابعی که می خواهید در آن اطلاعات کلید های فشرده شده را ذخیره کنید البته در ابتدای این تابع باید تابع قبلی را call کنید تا روال طبیعی سیستم بهم نخورد. سپس تنها
کاری که باید بکنید resident کردن برنامه در حافظه است که توسط تابع keep انجام می شود . نمونه کد زیر دقیقا interrupt صفحه کلید را تغییر می دهد و جای دو کلید را عوض می کند.


#include <dos.h>
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
extern unsigned _heaplen = 256;
extern unsigned _stklen = 128;
unsigned char ch;
void interrupt ( *OldKey )(__CPPARGS);
void interrupt NewKey (__CPPARGS);
void interrupt NewKey(__CPPARGS)
{
OldKey();
if ( peek(0x40, 0x1a) != peek(0x40, 0x1c) )
{
ch = (unsigned char) peek(0x40, peek(0x40, 0x1a));
if ( ch==96 ) poke(0x40, peek(0x40, 0x1a), 27);
if ( ch==27 ) poke(0x40, peek(0x40, 0x1a), 96);
}
}
main()
{
OldKey=getvect(0x9);
setvect(0x9,NewKey);
keep(0, _SS + (_SP/16) - _psp + 1 );
return 0;
}

سید یوسف
یک شنبه 24 مرداد 1389, 22:42 عصر
خیلی ممنون ساسان جان واقعا خیلی کمکم کردی ، امید وارم بتونم یک روزی تلافی کنم.البته من ورودی صفحه کلید رو از بافرش میخوندم و تو فایل قرار میدادم و فقط میخواستم برنامم دائمی تو حافظه در حال اجرا باشه که با راهنمائیهای تو کارم خیلی راحتر شد،بازم خیلی ممنون