דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מיעון מבוסס היסט

מיעון מבוסס היסט

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 2 כותבים 48 צפיות 1 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שאלתיאלש
    שאלתיאלש
    שאלתיאל
    כתב נערך לאחרונה על ידי
    #1

    יודע שזה אחד מכמה דרכים אבל, למה?
    כאילו למה כל התסבוך של מיעון מבוסס היסט שצריך לומר למעבד
    מהRIP לך 200 בתים לכתובת זיכרון כך וכך כאילו, למה?

    תגובה 1 תגובה אחרונה
    0
    • yossizY
      yossizY
      yossiz
      כתב נערך לאחרונה על ידי yossiz
      #2

      זה לא תחום שאני בקי בו, התשובה הבסיסית היא ככה:
      צריך להבחין בין מיעון שהוא יחסי לבסיס כלשהו סתמי לבין מיעון יחסי ל-RIP

      מיעון מבוסס היסט סתמי הוא צורך מאוד נפוץ, זה נועד כדי לאפשר גישה קלה לשדה בתוך מבנה נתונים
      דוגמה:
      נגיד יש לך איזה שירות ענן כלשהו (SaaS בלע"ז), אז יש משתשמים במערכת ולכל משתמש יש קרדיטים שהוא קונה כדי להשתמש במערכת. אז יש לך מבנה נתונים שמייצג לקוח. המבנה הזה הוא עם כמה שדות, יש שדה של שם, גיל, מספר קרדיטים במערכת, ורמת הרשאה.
      ואז מסביב אתה כותב פונקציות עזר, למשל פונקציה שיוצרת לקוח חדש מארגומנטים, עוד פונצקיה שמעדכן את רמת ההרשאות ועוד אחד שמעדכן את מספר הקרדיטים במערכת.
      אז הפונקציה שמעדכנת את מספר הקרדיטים, היא מקבלת כארגומנט את הכתובת של אובייקט הלקוח, והפונקציה צריכה לגשת להיסט מסויים בתוך המבנה כדי לעדכן את הערך שנמצא שם
      מכיון שזה צורך כל כך נפוץ, יצרו פקודות מיוחדות לגשת בצורת בסיס+היסט במקום להשתמש בפקודות הרגילות של חיבור כי ככה יוצא קוד בינארי יותר קטן וגם זה הפקודה יותר יעילה מאשר לעשות בעצמך את הפעולה המתמטית של חישוב הבסיס+ההיסט ולשמור את זה בעוד אוגר ואז לגשת לתוצאה

      לגבי מיעון שהוא יחסי ל-RIP, זה סיפור קצת שונה:
      הצורך בזה הוא כדי לבנות ספריות נטענות (DLL-ים בווינדוס או shared objects בלינוקס) בצורה שאפשר להטעין אותם לכל מקום בראם בלי לעבור על כל הכתובות ולעדכן אותם (מה שנקרא Position Independent Code או PIC)
      הסבר:
      בהרבה ספריות יש בנוסף לאוסף של פונקציות, גם צורך לשמור ולגשת לדאטה גלובלי כלשהו, אם הכתובת של המשתנה הגלובלי הזה יהיה קבוע, אי אפשר יהיה לטעון את הספרייה לכל מיקום בזכרון בלי לעדכן כל מקום שניגש למשתנה הגלובלי הזה, לכן המציאו אפשרות לגשת למיקום שהוא יחסי ל-RIP ככה בכל כתובת שתטען את הספרייה הקוד יעבוד
      אגב, בלי אפשרות זו, לא היה אפשר לעשות את זה עם פקודות מתמטיות, כי אין גישה ישירה לערך של RIP

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
      👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

      תגובה 1 תגובה אחרונה
      1
      • שאלתיאלש
        שאלתיאלש
        שאלתיאל
        כתב נערך לאחרונה על ידי
        #3

        @yossiz הדוגמא הראשונה תפסה לי את העיין תודה! ממש שמח שאפשר להיעזר בך.

        תגובה 1 תגובה אחרונה
        1
        • שאלתיאלש
          שאלתיאלש
          שאלתיאל
          כתב נערך לאחרונה על ידי
          #4

          @yossiz אגב , בקוד הזה:

          
          global main
          extern GetStdHandle
          extern WriteConsoleA
          extern ExitProcess
          section .bss
              buffer  resb 8
              written resd 1
          section .text
          main:
              push    r12
              push    r13
              sub     rsp, 40
              mov     eax, 10000
              lea     rdi, [rel buffer+7]
              mov     byte [rdi], 10
              dec     rdi
          

          למה מחסרים 1 מRDI?

          תגובה 1 תגובה אחרונה
          0
          • yossizY
            yossizY
            yossiz
            כתב נערך לאחרונה על ידי
            #5

            זה לא קשור לנושא זה, @dovid מקפיד על זה
            ואגב הקוד הוא חלקי, אפשר רק לנחש שזה חלק מלולאה שממיר מספר למחרוזת, אחרי שהוא כותב תו \n (דהיינו 0x10) לסוף bufffer הוא חוזר אחורה לכתוב את הספרה האחרונה של המספר

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
            👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

            תגובה 1 תגובה אחרונה
            3

            שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

            נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

            בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

            הרשמה התחברות
            תגובה
            • תגובה כנושא
            התחברו כדי לפרסם תגובה
            • מהישן לחדש
            • מהחדש לישן
            • הכי הרבה הצבעות


            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום