2012-08-27 21 views
5

मैं असेंबली और डिस्सेप्लर के बारे में अधिक जानने की कोशिश कर रहा हूं। मेरा लक्ष्य डीबगर (ओली) का उपयोग करके एक विशिष्ट पता लिखने के तरीके को संशोधित करना है। अधिमानतः इसे एक संख्या (20, 50, आदि ..) द्वारा बढ़ाकर मैं फ़्लोटिंग पॉइंट नंबर के पते की पहचान कर सकता हूं (इस मामले में 33B7420C पर स्थित)।एफएसटीपी ड्वॉर्ड पीटीआर डीएस क्या करता है: [ईएसआई +1224] क्या करते हैं?

जब मैं सेट स्मृति उपयोग पर एक ब्रेकपाइंट बारे में यह मेरे 00809B2E जो निम्नलिखित विधानसभा है के लिए लाता है:

FSTP DWORD PTR DS:[ESI+1224]

वास्तव में यह क्या है इस पते में कर रहा है? मुझे पता है कि एफपीयू रजिस्टर में वह नंबर है जो मैं ढूंढ रहा हूं लेकिन यह सुनिश्चित नहीं है कि यह पता क्या कर रहा है।

निकटतम मैं Googling के लिए आते हैं है:

EAX 00000000 
ECX 00A16E40 EZ.00A16E40 
EDX FFFFFFFF 
EBX 33B74578 
ESP 0018FA90 
EBP 00000000 
ESI 33B72FE8 
EDI 33B74578 
EIP 00809B2E <EZ.Breakpoint for time> 
C 0 ES 002B 32bit 0(FFFFFFFF) 
P 0 CS 0023 32bit 0(FFFFFFFF) 
A 0 SS 002B 32bit 0(FFFFFFFF) 
Z 0 DS 002B 32bit 0(FFFFFFFF) 
S 0 FS 0053 32bit 7EFDD000(FFF) 
T 0 GS 002B 32bit 0(FFFFFFFF) 
D 0 
O 0 LastErr ERROR_SUCCESS (00000000) 
EFL 00210202 (NO,NB,NE,A,NS,PO,GE,G) 
ST0 valid 1150.0000000000000000 
ST1 zero 0.0 
ST2 zero 0.0 
ST3 empty 64.951911926269531250 
ST4 empty -13.250000000000000000 
ST5 empty 64.951911926269531250 
ST6 empty 64.951911926269531250 
ST7 empty 0.0239995196461677551 
      3 2 1 0  E S P U O Z D I 
FST 2927 Cond 0 0 0 1 Err 0 0 1 0 0 1 1 1 (LT) 
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1 

किसी भी मदद की सराहना की जाएगी, धन्यवाद: What does MOV EAX, DWORD PTR DS:[ESI] mean and what does it do?

रजिस्टरों की एक प्रति निम्न दिखाता है!

+9

आप विशेष निर्देश के स्पष्टीकरण के लिए 86 विधानसभा संदर्भ की एक प्रति प्राप्त करना चाहिए। हर बार जब आप एक निर्देश का सामना करते हैं तो एसओ पूछना अच्छा नहीं है। –

उत्तर

14

FSTP नामित स्मृति क्षेत्र में फ़्लोटिंग-पॉइंट रजिस्टर स्टैक (ST0) के शीर्ष से एक फ़्लोटिंग पॉइंट नंबर संग्रहीत करता है। DWORD संशोधक का उपयोग करना मतलब है कि 32-बिट फ्लोट लिखा जाएगा। P प्रत्यय इंगित करता है कि ऑपरेशन के बाद फ़्लोटिंग-पॉइंट रजिस्टर स्टैक पॉप हो जाएगा।

तो, प्रभाव में, यह निर्देश 1150.0 डालता DS:[ESI+1224] पर (32-बिट नाव के रूप में), तो रजिस्टर ढेर (जो ST0 = 0.0, ST1 = 0.0, ST2 = <empty>, आदि का कारण बनता है) दिखाई नहीं देता।

+0

धन्यवाद @raymond ने कहा, मुझे x86 असेंबली पर और अधिक पढ़ना होगा। मैं उस स्टैक के मूल्य को 50 तक जोड़ना चाहता हूं। लेकिन मुझे नहीं पता कि असेंबली में इसे कैसे प्राप्त किया जाए। क्या यह रजिस्टर लोड करता है और 'एफएडीडी' का उपयोग कुछ स्मृति पते पर इंगित करता है जिसमें 50 है। मुझे लगता है मुझे असेंबली पर और पढ़ना होगा :( –

1

यह आपके पते पर एकल-परिशुद्धता में ST0 (1150.0) संग्रहीत कर रहा है। और पॉपिंग एफपीयू स्टैक से मूल्य कहा।

-3

(50 के लिए 0x32 हेक्स जा रहा है) 50 जोड़ने के लिए:

mov eax, dword[ds:esi+0x1224] 
add eax, 0x32 
mov dword[ds:esi+0x1224], eax 
संबंधित मुद्दे