PDA

View Full Version : ميخواهم توابع درون يک DLL را بدست آورم



K.Mohammadreza
چهارشنبه 30 اردیبهشت 1388, 17:14 عصر
با سلام به همه برنامه نويسان مخصوصا برنامه نويسان دلفي
بنده يک زحمت داشتم و آن هم اينست که ميخواهم توابع درون يک DLL را بدست آورم همچنين پارامترهاي لازم براي اجراي توابع، من از برنامه DLL Export Viewer جهت بدست آوردن توابع يک DLL استفاده کردم و توابع را بدست آوردم حالا نمي دانم که هر تابع چه پارامترهايي براي فراخواني نياز دارد. خواهشا هر کس مي تواند تابعي يا برنامه اي معرفي کند که بتواند توابع يک DLL را با تمام پارامترهاي ورودي و فرمت خروجي بدست آورد لطفا راهنمايي کند

با تشکر

Saeed_m_Farid
چهارشنبه 30 اردیبهشت 1388, 21:13 عصر
با سلام به همه برنامه نويسان مخصوصا برنامه نويسان دلفي
بنده يک زحمت داشتم و آن هم اينست که ميخواهم توابع درون يک DLL را بدست آورم همچنين پارامترهاي لازم براي اجراي توابع، من از برنامه DLL Export Viewer جهت بدست آوردن توابع يک DLL استفاده کردم و توابع را بدست آوردم حالا نمي دانم که هر تابع چه پارامترهايي براي فراخواني نياز دارد. خواهشا هر کس مي تواند تابعي يا برنامه اي معرفي کند که بتواند توابع يک DLL را با تمام پارامترهاي ورودي و فرمت خروجي بدست آورد لطفا راهنمايي کند

با تشکر
با اجازه اساتيد :
براي بدست آوردن توابع كه خيلي ابزار وجود داره، يكي از معروفترين هاش هم dependency walker (http://www.dependencywalker.com/) هست، ولي بدست آوردن پارامترها و فرمت خروجي و كلاسها و ... فكر نميكنم به اين راحتي باشه، ضمن اينكه قبلا هم در اين مورد (http://www.barnamenevis.org/forum/showthread.php?t=148695) بحث شده و مطمئنا نياز به مهندسي معكوس خواهد داشت، در ضمن شما با باز كردن فايل باينري dll با يه editor‌ حرفه اي (اگه زياد حجيم نباشه) همونطوركه دوستان هم گفتن يه چيزايي ميتونين از كليت اون حالي بشين ولي اينكه دقيق بتونين يه چيز تميز و كامل در بيارين، من كه فكر نمي كنم.

در ضمن جواب Dependency Walker به سوال شما اينه‌:


For most functions, this information is simply not present in the module. The Windows' module file format only provides a single text string to identify each function. There is no structured way to list the number of parameters, the parameter types, or the return type. However, some languages do something called function "decoration" or "mangling", which is the process of encoding information into the text string. For example, a function like int Foo(int, int) encoded with simple decoration might be exported as _Foo@8. The 8 refers to the number of bytes used by the parameters. If C++ decoration is used, the function would be exported as ?Foo@@YGHHH@Z, which can be directly decoded back to the function's original prototype: int Foo(int, int). Dependency Walker supports C++ undecoration by using the Undecorate C++ Functions Command (http://www.dependencywalker.com/help/html/hidm_view_undecorated.htm).
بطور كلي اين امر معمولا تجربيه، يا اينكه توسعه دهنده dll به شما ميگه كه از چه توابعي و با چه پارامترهايي استفاده كنيد و درنهايت ممكنه يه ساختار واحد مثل DLL های دانت نت داشته باشه كه همونطوركه DAKAL گفتن (http://www.barnamenevis.org/forum/showpost.php?p=693992&postcount=7) با هر Reflector که پیدا کنی میشه هم ليست توابع و هم پارامترهاش رو پيدا كنيد و يا از MSDN در بيارين ...



در ضمن يه توضيح مفيد از دكتر باب در زمينه استفاده dll هاي C در دلفي رو ميتونين اينجا (http://www.drbob42.com/delphi/headconv.htm)ببينين.

K.Mohammadreza
شنبه 02 خرداد 1388, 10:56 صبح
از جواب شما ممنون ولي من يک فايل DLL دارم که براي ايجاد قفل نرم افزاري بصورت حرفه اي کاربرد داره با دلفي 5 نوشته شده و نياز دارم تا توابع اونو باژارامترهاي ورودي بدست بيارم که متاسفانه تا کنون موفق نشدم.

Delphi Coder
سه شنبه 05 خرداد 1388, 23:51 عصر
من فکر میکنم در بخش مهندسی معکوس مطرح بشه این تاپیک بهتره.