اطلاعیه

Collapse
No announcement yet.

دسترسي به متغييرهاي عمومي در dll

Collapse
X
 
  • Filter
  • زمان
  • Show
Clear All
new posts

  • دسترسي به متغييرهاي عمومي در dll

    در زبان دلفي ، فرض كنيد در كنار فايل اجرائي اصليمون دوتا فايل dll هم داريم
    توي اولي يك متغيير عمومي در حافظه داريم ، چطوري در dll دوم به اين متغيير دسترسي داشته باشيم؟ ( استفاده از فايل به علت افت سرعت خواندن ديتا نميتونم داشته باشم ) ولي هر روشي كه از حافظه استفاده كنه برام بلامانع هست

  • #2
    جوکر بیشتر توضیح بدی شاید بتونم جواب دقیق بهت بدم. این چیزی که میگم یه دیدگاه کلی هست ولی احتمالا بدرد شما هم میخوره. شما وقتی میگی کنار فایل اصلیت 2 تا Module داری من فرض رو بر این میگیرم که این دو تا dll تو همون Address Space مربوط به Process فایل اصلیت لود میشن. خب هر dll توی Adress Space به یه Base Address لود میشه. شما میتونی با GetModuleHandle آدرسی که هر dll لود شده رو پیدا کنی. متغیر عمومی شما تو یه Section هست که فاصله مشخصی از Image Base اون dll داره(فرضا RVA 2000h)، هر متغیر و ساختار و ... از نوع عمومی یه آفست مشخصی از ابتدای اون Section داره. فرضا متغیر شما تو آفست 20h قرار داره. Virtual Address اون متغیر میشه:

    Dll Base Address + RVA of that Section + Relative Offset

    این اعداد رو فقط بعنوان مثال آوردم:

    20 + 2000 + 10000000

    نتیجه نهایی میشه 10002020h که با اشاره گر میشه به این آدرس دسترسی پیدا کرد(فقط داخل همون Process میشه از اشاره گر استفاده کرد).

    Comment


    • #3
      يه نرم افزاره كه انجينش را قراره من بنويسيم gui را يه نفر ديگه
      ميخوام اطلاعاتي كه لازم داره را بهش پاس بدم يا بگيرم ازش
      حالا چي پيشنهاد ميكنيد؟

      Comment


      • #4
        تو DLL اول یه IPC تعریف کن تو DLL دوم یه مسیج بفرست به DLL اول و از DLL اول مقدار متغیرت رو بخون تو همون IPC Message به DLL دوم ارسال کن.
        واسه این کار هم میتونی از یونیت MadCodeHook استفاده کنی.

        انجام پروژه های نرم افزاری در کمترین زمان و نازلترین قیمت
        برای تماس به آیدی Arashjeyjey در یاهو مسنجر پیام بدید.

        http://www.jeyjey.blogfa.com

        Comment


        • #5
          ممنون
          با دو روش متفاوت مشكل حل شد
          اوليش MapFile بود كه از حافظه شير شده استفاده ميكرد
          دوميش هم استفاده از ارتباط socket بود

          Comment

          Working...
          X