PDA

View Full Version : خواندن OFFSET های فایل



حمیدرضاصادقیان
پنج شنبه 15 آذر 1386, 21:03 عصر
سلام دوستان. من میخوام به وسیله برنامه نویسی یک فایل رو باز کرده فرضا به offset شماره 31EA0 برم و مقادیر بایتهای اونو بخوانم.بوسیله کلاس TFileStream اینکارو کردم ولی اولا شماره offset رو فقط int قبول میکنه.در ضمن من هرچی بوسیله position سعی میکنم به بایتهای بعدی انتقال پیدا کنم فقط مقدار 00 رو به من نشون میده.ممنون میشم راهنمایی کنید.

شهریار بهمن پور
پنج شنبه 15 آذر 1386, 22:06 عصر
سلام فکر کنم باید از تابع ReadProcessMemory استفاده کنید

حمیدرضاصادقیان
پنج شنبه 15 آذر 1386, 22:47 عصر
ممنون.ولی این چیزی که شما فرمودین کارش اینه


The ReadProcessMemory function reads memory in a specified process. The entire area to be read must be accessible, or the operation fails.

من وقتی فایلی رو باز میکنم میخوام بایت به بایت محتویات داخل اونو بخونم.تاجایی که اطلاع دارم باید از کلاسهای Tstream مانند Tfilestream استفاده کنم.تا حدودی هم اینکارو کردم ولی به مشکل برخوردم که دراولین پست توضیح دادم.

anubis_ir
پنج شنبه 15 آذر 1386, 23:58 عصر
برای مقادیر هگز مثل 31EA0 که آنها هم int هستند، یک $ به اول آن اضافه کنید تا قابل استفاده شود.

Hamid_PaK
جمعه 16 آذر 1386, 05:50 صبح
روش خواندن بایت ها هم مهم است ، به چه روشی بایتها مورد نظر رو فراخوانی می کنید.

یا حق ...

حمیدرضاصادقیان
جمعه 16 آذر 1386, 09:23 صبح
ممنون از همه.مشکل حل شد.الان یک مشکل دیگه اینه که میخوام حالا مقدار بایتی رو که بدست آوردم به رشته تبدیل کنم.ایا باید خودم تابعی برای اینکار بنویسم یا روشی وجود داره؟
مثلا مقدار یک بایت برابر 48 است که در وقتی در فایل نگاه میکنم برابر حرف H است.حالا اینو چطور تبدیل کنم؟

anubis_ir
جمعه 16 آذر 1386, 10:41 صبح
از تابع CHR استفاده کن.

حمیدرضاصادقیان
جمعه 16 آذر 1386, 18:58 عصر
تابع chr مگر مقدار یک بایت رو برمیگردونه.ولی من میخوام مقدار hex رو به text تبدیل کنم.در help دلفی هم ننوشته که میتونی مقدار hex رو با chr به Text تبدیل کنی.

Hamid_PaK
جمعه 16 آذر 1386, 20:24 عصر
دوست عزیز مقادیر HEX و یا Int همه از نوع عددی هستند و فرقی ندارند تنها برای وارد کردن مقدار هگزا در دلفی شما از یک $ استفاده می کنید ولی در نهایت برای کامپایلر به مقدار باینری تبدیل خواهد شد.
در نهایت اجرای این دو فرمان نتیجه یکسانی را در بر خواهد داشت.


ShowMessage( Chr( $a ));
// or
ShowMessage( Chr( 10 ));


یا حق ...