PDA

View Full Version : انتقال کد یک باتن به برنامه دیگر



Mask
جمعه 25 مرداد 1392, 03:48 صبح
سلام
سوالم رو با یک مثال ساده توضیح میدم:
برنامه ای نوشته ام که در اون برنامه یک دکمه هست ، که کاربر با زدن اون دکمه ، یک مسیج بهش نمایش داده میشه.
من سورس اون برنامه رو بابت بی حواسی که دارم ، از رو سیستم پاک میکنم.
اما فایل exe رو هنوز دارم.
یه پروژه جدید ایجاد میکنم و میخام مجددا یه برنامه مثله اون برنامه قبلی بنویسم اما یادم نیست دقیقا در اون دکمه چی نوشته بودم.
میام فایل exe موجود رو در برنامه olly یا هر ریسورسر دیگه ای باز میکنم.
وقتی که رو دکمه کلید میکنم . olly جامپ میشه سر خط کد دکمه.
سوال اینجاست ، آیا میشه این کدهای اسمبلی که در olly دارم میبینم رو بردارم و در پروژه جدیدی که در دلفی ایجاد کردم ، در رویداد OnClik باتنم بزارم؟
که با کلیک بر روی دکمه همون مسیج نمایش داده بشه؟
آیا این کار شدنیه؟
ممنون از جوابتون.

Felony
جمعه 25 مرداد 1392, 05:53 صبح
هم آره ، هم نه ... !

اون کد بسته به شرایط مختلفی تولید شده ( نسخه کامپایلر ، کامپوننت های نصب شده ، نسخه لینکر ) ، چیزی که تو Olly میبینید درسته کد اسمبلی شماست ، ولی به کدهای دیگه وابستگی زیادی داره ، مثلا امکان داره Optimizer دلفی بسته به شرایط تشخیص داده باشه که فلان قسمت کدتون تکراریه و برداشته باشه به عنوان یک Proc یه جایی تعریفش کرده باشه و در زمان نیاز Call کرده باشش ، ممکنه بسته به صلاح دید خودش کلی بلا سر اشاره گرها ( Sender : TObject و ... ) آورده باشه ، البته منظورم از ممکنه این نیست که شاید کامپایلر دلفی اینطوری طراحی شده باشه ، بی شک Optimizer دلفی از این کارها زیاد میکنه ، منظور از ممکنه رفتار کامپایلر با کد شما هست .

بنابراین شما نمیتونی برنامه رو تو یه دیباگر باز کنی و بگی خوب ، از اینجا تا اینجا کپی میگیرم ، وسلام ، اینجوری بود من فردا صبح برات فتوشاپ و Matlab و ... رو شخصی سازی میکردم :)
اگر تو دیباگ کردن تجربه داشته باشی ، اون کد میتونه بهت در به یاد آوردن کدهای قبلی کمک کنه ، همین :)

حاجی پشتکارتو دوست دارم ، ان الله یحب الصابرین :)

Mask
شنبه 26 مرداد 1392, 16:03 عصر
ممنون از پاسخت.
آیا اگه آفست ابتدا و انتهای پروسیجری که call شده باشه رو بدونیم ، و یا مقدار پروسیجر رو در بیاریم ،آیا میشه به کد اصلی بگیم که به این آدرس call کن.؟؟؟؟
آیا به صرفه هست.؟شدنیه؟

یوسف زالی
شنبه 26 مرداد 1392, 16:54 عصر
مشکل ابنه که اگر شما در برنامت آفست پروسیجر رو داری یعنی خود پروسیجر رو داری.
اگر این پروسیجر در برنامه ای جدا باشه با هر بار لود شدن این آدرس ممکنه عوض شه.
اما در حالت کلی با داشتن یک آدرس می تونید با پر کردن استک از پارامترهای مورد نیاز، یا آدرس های اونها، یک پروسیجر رو کال کنید.
اگر پروسیجر شما کوتاه هست شاید بتونید مستقیم دستورات اسمبلی اون رو استفاده کنید.
بهتره با مثال پیش بریم تا تئوری.