# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مهندسی مجدد و معکوس > سوال: پیدا کردن آرگومان های برنامه های GUI

## jeson_park

سلام
بعضی برنامه های ویندوزی رو می شه با تایپ نامشون به همراه آرگومان (مثلاً مسیر فایل ) اجرا کرد مثلاً notepad D:\Link.txt 
حالا چطوری می شه فهمید یه برنامه چه آرگومان هایی رو از ورودی می گیره؟؟

----------


## pcrlth0n

سلام.
بطور خلاصه:
برنامه  میاد رشته هایی که در CMD وارد شده رو بدست میاره.یکی از روشهای بدست آوردن  این رشته ها استفاده از تابع ویندوزی GetCommandLine هستش.
بعد میاد آرگومان جلوی اسم خودش رو پیدا میکنه و سپس آنرو جستجو میکنه که آیا چنین فایلی وجود داره یا نه. درصورت وجود چنین فایلی اونرو import میکنه  و باقی داستان.

حالا اینکه چطور میشه فهمید برنامه چه آرگومانهایی میگیره و اینکه اصلا آرگومان میگیره یا نه رو خودتون باید برنامه رو trace کنید. 
آرگومانهایی رو که میدید رو در حافظه BP بگذارید و ببینید باهاش چیکار میکنه.

----------


## jeson_park

> آرگومانهایی رو که میدید رو در حافظه BP بگذارید و ببینید باهاش چیکار میکنه.


با سلام و تشکر
میشه این قسمت رو یکم باز بنوماید؟  :لبخند گشاده!:

----------


## pcrlth0n

سلام.
روی مثال خودتون کار مکنیم:
notepad D:\Link.txt

 ابزار ollydbg باز کنید و open رو انتخاب کنید و  notepad.exe رو انتخاب کنید توی فیلد arguments مقدار D:\Link.txt رو وارد کنید و open رو بزنید.
حالا  توی memory مقدار D:\Link.txt رو جستجو کنید و روش bp بگزارید. بعد run رو  بزنید میبینید که در جایی که به آرگومان D:\Link.txt دسترسی پیدا میشه  متوقف میشید . البته احتمالا داخل توابع کتابخانه ای باشید کافیه تا وقتی  به user code برسید run until return رو بزنید. 
وقتی به کد یوزری برسید میبینید که notepad از تابع getmainargs استفاده کرده ...
حالا با f8 زدن جلو برید میبینید که داره با آرگومانتون کار میکنه ...

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

----------

