آموزش برنامه نویسی بصورت تئوری و عملی

۱۸ مطلب با موضوع «Windows» ثبت شده است

analyze_pe

pe نوعی فایل میباشد که استاندارد فایل های اجرایی ویندوز از جمله exe و dll و sys و .... میباشد . در این پست ما قصد داریم تا هدر  و دیتا های خام این فایل را تا حدودی بررسی نماییم.

در این عکس هدر فایل pe را مشاهده میکنیم .

pe

ادامه مطلب...
۰۱ بهمن ۹۶ ، ۱۹:۴۸ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

نوشتن درایور قسمت اول

از این به بعد بشتر تمرکز پستهام رو روی کرنل و درایور نویسی و ساختار درون اون میگذارم .
تصمیم داشتم بیشتر درمورد ساختار درون کرنل ویندوز توضیح بدم اما دیدم بیشتر موجب سردرگمی میشه برای همین تصمیم گرفتم با ارائه مثال ، در وقت مناسب ساختار هارو بیشتر توضیح بدم .

اولین پست ررو با یک مثال خیلی خیلی ساده توضیح میدم که خواننده ها بیشتر با روش کامپایل و اجرا و دیدن خروجی درایور آشنا بشن .

typedef struct _DRIVER_OBJECT {
  PDEVICE_OBJECT     DeviceObject;
  PDRIVER_EXTENSION  DriverExtension;
  PUNICODE_STRING    HardwareDatabase;
  PFAST_IO_DISPATCH  FastIoDispatch;
  PDRIVER_INITIALIZE DriverInit;
  PDRIVER_STARTIO    DriverStartIo;
  PDRIVER_UNLOAD     DriverUnload;
  PDRIVER_DISPATCH   MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1];
} DRIVER_OBJECT, *PDRIVER_OBJECT;

ادامه مطلب...
۳۱ شهریور ۹۶ ، ۱۲:۱۹ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

ntquerysysteminformation

این تابع وضعیت سیستم را ارزیابی میکند .

NTSTATUS WINAPI NtQuerySystemInformation(
  _In_      SYSTEM_INFORMATION_CLASS SystemInformationClass,
  _Inout_   PVOID                    SystemInformation,
  _In_      ULONG                    SystemInformationLength,
  _Out_opt_ PULONG                   ReturnLength
);
ادامه مطلب...
۲۳ شهریور ۹۶ ، ۲۰:۳۰ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

how to create service windows

سرویس برنامه ای است که که فاقد گرافیک و واسط کاربری میباشد و برنامه ای است که میتواند بصورت لحظه ای یا دائمی ، از قبل از ورود کابر به ویندوز یا در هر لحظه ای فعال و اجرا گردد.

برای شروع چند ساختمان مورد استفاده در آن را بر رسی میکنیم .

ساختمان SERVICE_TABLE_ENTRY:

برای راه اندازی سرویس ، مایکروسافت یک ساختمان دادی ای تشکیل داده که باید آن را پر کنیم الگوی آن به صورت زیر است

typedef struct _SERVICE_TABLE_ENTRY {
  LPTSTR                  lpServiceName;
  LPSERVICE_MAIN_FUNCTION lpServiceProc;
} SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;

داده اول یک استرینگ است که شامل نام سرویس میباشد ، داده دوم نیز باید با تابعی مقدار دهی شود که تابع اصلی سرویس میباشد(در مثال ارائه شده با آن بیشتر آشنا میشویم.

ادامه مطلب...
۲۳ شهریور ۹۶ ، ۱۴:۳۴ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

Shared_memory

در قسمت های قبل در مورد پایپ و به اشتراک گذاری حافظه در پراسس ها به اندازه کافی صحبت شد . اما در اون روش ما یک کپی از دیتا رو در اختیار پراسس های دیگر قرار میدادیم .

در این قسمت تصمیم داریم تا از روش دیگری استفاده کنیم ، در این روش ما یک آدرس از دیتای مورد نظر خودمون رو بین دو یا چند پراسس به اشتراک میگذاریم(بدون کپی کردن). بدلیل این که کپیی از آنها تهیه نمیکنیم سرعت انتقال بسیار بیشتر از استفاده از پایپ میبشد . اما باید این نکته را نیز در نظر داشت در انتقال حجم های کم این روش میتواند باعث افزایش بی دلیل داده گردد ، دلیل آن هم این است که چون مثلا پیج های حافظه ( اغلب ) به اندازه 4 کیلوبایت میباشد ،اگر ما داده ای را که به اندازه 3 کیلو بایت است را بین پروسس ها شیر کنیم ، مقدار 4 کیلوبایت شیر میگردد (چون هر پیج دارای 4 کیلوبایت است ) ، و بنابر این یک کیلوبایت اضافه شیر میگردد .


HANDLE WINAPI CreateFileMapping(
  _In_     HANDLE                hFile,
  _In_opt_ LPSECURITY_ATTRIBUTES lpAttributes,
  _In_     DWORD                 flProtect,
  _In_     DWORD                 dwMaximumSizeHigh,
  _In_     DWORD                 dwMaximumSizeLow,
  _In_opt_ LPCTSTR               lpName
);
LPVOID WINAPI MapViewOfFile(
  _In_ HANDLE hFileMappingObject,
  _In_ DWORD  dwDesiredAccess,
  _In_ DWORD  dwFileOffsetHigh,
  _In_ DWORD  dwFileOffsetLow,
  _In_ SIZE_T dwNumberOfBytesToMap
);
void CopyMemory(
  _In_       PVOID  Destination,
  _In_ const VOID   *Source,
  _In_       SIZE_T Length
);


Shared Memory


ادامه مطلب...
۲۱ شهریور ۹۶ ، ۲۲:۱۵ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

List_Process_app

این برنامه در حالت کلی به دو بخش تقسیم میشه که قسمت اول در پشت صحنه بصورت یک سرویس همیشه در حال اجراست و به عنوان یه ناظر بصورت دائم پراسس های اجرا شده در سیستم را ذخیره میکند و زمانی که برنامه کاربر اجرا میگردد این اطلاعات را در اختیار برنامه کاربر قرار میدهد تا قابل مشاهده باشد .

نکته مهم اینکه این برنامه تنها در ویندوز  7 . 8 . 10 64 bit قابل اجرا میباشد .

(خوشحال میشم نظراتتون رو درمورد برنامه اعلام کنید چه نقاط قوت و چه ضعف )


ادامه مطلب...
۱۴ شهریور ۹۶ ، ۰۰:۰۳ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

Virtual address spaces

زمانی که یک پردازنده اقدام به خواندن و نوشنتن به یک مکان حافظه میکند ، از یک آدرس مجازی استفاده میکند .

به عنوان بخشی از عملیات  خواندن یا نوشتن ، پردازنده آدرس مجازی را به آدرس فیزیکی ترجمه میکند . دسترسی به حافظه از طریق یک آدرس مجازی مزایای زیر را دارد :
ادامه مطلب...
۱۹ مرداد ۹۶ ، ۲۰:۱۸ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

ProcessAffinityMask , ThreadAffinityMask , SystemInfo

در این پست توضیحات مختصری درمورد سه API ویندوز میدهیم و برای هر یک مثالی میزنیم .

BOOL WINAPI SetProcessAffinityMask(
  HANDLE    hProcess,
  DWORD_PTR dwProcessAffinityMask
);
DWORD_PTR WINAPI SetThreadAffinityMask(
  HANDLE    hThread,
  DWORD_PTR dwThreadAffinityMask
);
void WINAPI GetSystemInfo(
  LPSYSTEM_INFO lpSystemInfo
);

ادامه مطلب...
۱۶ مرداد ۹۶ ، ۱۹:۵۹ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

Dynamic_link_library , PE(Portable Executable)

در خلاصه ترین حالت میتوان گفت Dynamic link library نام کتابخانه هایی است که توسط برنامه ها استفاده میشوند و توسط مایکروسافت پیاده سازی شده ( که اغلب دارای پسوند dll میباشند ) .
این فایل ها همانند ساختار فایل های exe در ویندوز دارای ساختار (pe (Portable Executable میباشد .
این کتابخانه ها میتوانن شامل کد و دیتا و ریسورسها باشند .
یکی از مزایای فایل های dll این است که یک بار در حافظه لود میشود و میتواند توسط چندین برنامه مورد استفاده قرار گیرد(به صورت مجازی برای هر برنامه کپی میشود ) . میتوان dll ها را در موقه نیاز در برنامه لود کرد و هر جا که دیگر مورد نیاز نبود آن را Unload کرد .
از طرفی دیگر میتوان از آن برای استفاده از برنامه های قابل آبدیت نیز استفاده کرد به این صورت که میتوان آیکن ها ، فونت ها و کد هایی که در هسته اصلی برنامه جایگاهی ندارند را درون dll ها قرار داد و در هنگام آبدیت تنها این dll ها را تعویض کرد.


Dynamic link library

ادامه مطلب...
۱۴ مرداد ۹۶ ، ۱۵:۱۴ ۱ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی

What is a driver

درایور نام برنامه ای است که در سطح کرنل اجرا میشود (در برخی موارد تنها در سطح یوزر نوشته و اجرا میشود) و اجازه میدهد یک سیستم عامل با یک دستگاه در ارتباط باشد و همچنین از کاربرد دیگر آن ، درایور به برنامه نویس این توانایی را میدهد که تغییراتی را که میخواهد در سطح کرنل انجام دهد اعمال کند .

فرض کنید یک برنامه نیاز دارد که یک مقدار اطلاعات را از دستگاهی بخواند . برنامه یک تابع اجرایی را به وسیله سیستم عامل صدا میزند و سیستم عامل نیز یک تابع از درایور را برای گرفتن اطلاعات از دستگاه فراخوانی میکند.
درایوری که به وسیله کمپانی طراحی شده میداند که چگونه باید با سخت افزار وسیله خود ارتباط برقرار کند .
بعد از اینکه درایور اطلاعات را از دستگاه گرفت آن را در اختیار سیستم عامل قرار میدهد و سیستم عامل نیز آن را به برنامه مورد نظر میدهد تا از آن استفاده کند

driver

ادامه مطلب...
۰۸ مرداد ۹۶ ، ۲۳:۲۹ ۰ نظر موافقین ۰ مخالفین ۰
سید عمید قائم مقامی