Сейчас на форуме: cppasm, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Что такое MOV DWORD PTR SS:[EBP-4], X?
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 мая 2016 21:01
· Личное сообщение · #1

Компилятор сгенерировал выхлоп простой функции. Не пойму, зачем тут нужен сабж, зачем там эти числа? EBP-4 в LOCAL.1 ( PTR SS:[LOCAL.1] )

Code:
  1. Address   Hex dump          Command                                                                                  Comments
  2. 00991030  /$ \55            PUSH EBP                                                                                 ; untitled2_acs_mgr_3_setpeer.test1(void)
  3. 00991031  |.  8BEC          MOV EBP,ESP
  4. 00991033  |.  6A FF         PUSH -1
  5. 00991035  |.  68 55369900   PUSH 00993655                                                                            ; Entry point
  6. 0099103A  |.  64:A1 0000000 MOV EAX,DWORD PTR FS:[0]
  7. 00991040  |.  50            PUSH EAX
  8. 00991041  |.  83EC 50       SUB ESP,50
  9. 00991044  |.  A1 48709900   MOV EAX,DWORD PTR DS:[__security_cookie]
  10. 00991049  |.  33C5          XOR EAX,EBP
  11. 0099104B  |.  50            PUSH EAX
  12. 0099104C  |.  8D45 F4       LEA EAX,[LOCAL.3]
  13. 0099104F  |.  64:A3 0000000 MOV DWORD PTR FS:[0],EAX
  14. 00991055  |.  C745 C4 00000 MOV DWORD PTR SS:[LOCAL.15],0
  15. 0099105C  |.  6A 08         PUSH 8                                                                                   ; /Arg1 = 8
  16. 0099105E  |.  E8 19040000   CALL operator new                                                                        ; \MSVCR100D.operator new
  17. 00991063  |.  83C4 04       ADD ESP,4
  18. 00991066  |.  8945 E0       MOV DWORD PTR SS:[LOCAL.8],EAX
  19. 00991069  |.  C745 FC 00000 MOV DWORD PTR SS:[LOCAL.1],0
  20. 00991070  |.  837D E0 00    CMP DWORD PTR SS:[LOCAL.8],0
  21. 00991074  |.  74 1C         JE SHORT 00991092
  22. 00991076  |.  6A 00         PUSH 0
  23. 00991078  |.  8B4D E0       MOV ECX,DWORD PTR SS:[LOCAL.8]
  24. 0099107B  |.  FF15 2C849900 CALL DWORD PTR DS:[<&Qt5Networkd.QNetworkAccessManager::QNetworkAccessManager>]
  25. 00991081  |.  8B45 E0       MOV EAX,DWORD PTR SS:[LOCAL.8]
  26. 00991084  |.  C700 D05E9900 MOV DWORD PTR DS:[EAX],OFFSET QNetworkAccessManager::`local vftable'
  27. 0099108A  |.  8B4D E0       MOV ECX,DWORD PTR SS:[LOCAL.8]
  28. 0099108D  |.  894D C0       MOV DWORD PTR SS:[LOCAL.16],ECX
  29. 00991090  |.  EB 07         JMP SHORT 00991099
  30. 00991092  |>  C745 C0 00000 MOV DWORD PTR SS:[LOCAL.16],0
  31. 00991099  |>  8B55 C0       MOV EDX,DWORD PTR SS:[LOCAL.16]
  32. 0099109C  |.  8955 E4       MOV DWORD PTR SS:[LOCAL.7],EDX
  33. 0099109F  |.  C745 FC FFFFF MOV DWORD PTR SS:[LOCAL.1],-1
  34. 009910A6  |.  8B45 E4       MOV EAX,DWORD PTR SS:[LOCAL.7]
  35. 009910A9  |.  8945 E8       MOV DWORD PTR SS:[LOCAL.6],EAX
  36. 009910AC  |.  6A 04         PUSH 4                                                                                   ; /Arg1 = 4
  37. 009910AE  |.  E8 C9030000   CALL operator new                                                                        ; \MSVCR100D.operator new
  38. 009910B3  |.  83C4 04       ADD ESP,4
  39. 009910B6  |.  8945 D8       MOV DWORD PTR SS:[LOCAL.10],EAX
  40. 009910B9  |.  C745 FC 01000 MOV DWORD PTR SS:[LOCAL.1],1
  41. 009910C0  |.  837D D8 00    CMP DWORD PTR SS:[LOCAL.10],0
  42. 009910C4  |.  74 55         JE SHORT 0099111B
  43. 009910C6  |.  68 38589900   PUSH OFFSET 00995838                                                                     ; ASCII "http://api.forismatic.com/api/1.0/"
  44. 009910CB  |.  8D4D D0       LEA ECX,[LOCAL.12]
  45. 009910CE  |.  FF15 C8839900 CALL DWORD PTR DS:[<&Qt5Cored.QString::QString>]
  46. 009910D4  |.  C645 FC 02    MOV BYTE PTR SS:[LOCAL.1],2
  47. 009910D8  |.  8B4D C4       MOV ECX,DWORD PTR SS:[LOCAL.15]
  48. 009910DB  |.  83C9 01       OR ECX,00000001
  49. 009910DE  |.  894D C4       MOV DWORD PTR SS:[LOCAL.15],ECX
  50. 009910E1  |.  6A 00         PUSH 0
  51. 009910E3  |.  8D55 D0       LEA EDX,[LOCAL.12]
  52. 009910E6  |.  52            PUSH EDX
  53. 009910E7  |.  8D4D D4       LEA ECX,[LOCAL.11]
  54. 009910EA  |.  FF15 CC839900 CALL DWORD PTR DS:[<&Qt5Cored.QUrl::QUrl>]
  55. 009910F0  |.  8945 BC       MOV DWORD PTR SS:[LOCAL.17],EAX
  56. 009910F3  |.  8B45 BC       MOV EAX,DWORD PTR SS:[LOCAL.17]
  57. 009910F6  |.  8945 B8       MOV DWORD PTR SS:[LOCAL.18],EAX
  58. 009910F9  |.  C745 FC 03000 MOV DWORD PTR SS:[LOCAL.1],3
  59. 00991100  |.  8B4D C4       MOV ECX,DWORD PTR SS:[LOCAL.15]
  60. 00991103  |.  83C9 02       OR ECX,00000002
  61. 00991106  |.  894D C4       MOV DWORD PTR SS:[LOCAL.15],ECX
  62. 00991109  |.  8B55 B8       MOV EDX,DWORD PTR SS:[LOCAL.18]
  63. 0099110C  |.  52            PUSH EDX
  64. 0099110D  |.  8B4D D8       MOV ECX,DWORD PTR SS:[LOCAL.10]
  65. 00991110  |.  FF15 30849900 CALL DWORD PTR DS:[<&Qt5Networkd.QNetworkRequest::QNetworkRequest>]
  66. 00991116  |.  8945 B4       MOV DWORD PTR SS:[LOCAL.19],EAX
  67. 00991119  |.  EB 07         JMP SHORT 00991122
  68. 0099111B  |>  C745 B4 00000 MOV DWORD PTR SS:[LOCAL.19],0
  69. 00991122  |>  8B45 B4       MOV EAX,DWORD PTR SS:[LOCAL.19]
  70. 00991125  |.  8945 DC       MOV DWORD PTR SS:[LOCAL.9],EAX
  71. 00991128  |.  C745 FC 05000 MOV DWORD PTR SS:[LOCAL.1],5
  72. 0099112F  |.  8B4D DC       MOV ECX,DWORD PTR SS:[LOCAL.9]
  73. 00991132  |.  894D EC       MOV DWORD PTR SS:[LOCAL.5],ECX
  74. 00991135  |.  C745 FC 04000 MOV DWORD PTR SS:[LOCAL.1],4
  75. 0099113C  |.  8B55 C4       MOV EDX,DWORD PTR SS:[LOCAL.15]
  76. 0099113F  |.  83E2 02       AND EDX,00000002
  77. 00991142  |.  74 0D         JZ SHORT 00991151
  78. 00991144  |.  8365 C4 FD    AND DWORD PTR SS:[LOCAL.15],FFFFFFFD
  79. 00991148  |.  8D4D D4       LEA ECX,[LOCAL.11]
  80. 0099114B  |.  FF15 D0839900 CALL DWORD PTR DS:[<&Qt5Cored.QUrl::~QUrl>]
  81. 00991151  |>  C745 FC FFFFF MOV DWORD PTR SS:[LOCAL.1],-1
  82. 00991158  |.  8B45 C4       MOV EAX,DWORD PTR SS:[LOCAL.15]
  83. 0099115B  |.  83E0 01       AND EAX,00000001
  84. 0099115E  |.  74 0D         JZ SHORT 0099116D
  85. 00991160  |.  8365 C4 FE    AND DWORD PTR SS:[LOCAL.15],FFFFFFFE
  86. 00991164  |.  8D4D D0       LEA ECX,[LOCAL.12]
  87. 00991167  |.  FF15 D4839900 CALL DWORD PTR DS:[<&Qt5Cored.QString::~QString>]
  88. 0099116D  |>  8D4D F0       LEA ECX,[LOCAL.4]
  89. 00991170  |.  51            PUSH ECX
  90. 00991171  |.  FF15 34849900 CALL DWORD PTR DS:[<&Qt5Networkd.QSslConfiguration::defaultConfiguration>]
  91. 00991177  |.  83C4 04       ADD ESP,4
  92. 0099117A  |.  C745 FC 06000 MOV DWORD PTR SS:[LOCAL.1],6
  93. 00991181  |.  6A 00         PUSH 0
  94. 00991183  |.  8D4D F0       LEA ECX,[LOCAL.4]
  95. 00991186  |.  FF15 38849900 CALL DWORD PTR DS:[<&Qt5Networkd.QSslConfiguration::setPeerVerifyMode>]
  96. 0099118C  |.  8D55 F0       LEA EDX,[LOCAL.4]
  97. 0099118F  |.  52            PUSH EDX
  98. 00991190  |.  8B4D EC       MOV ECX,DWORD PTR SS:[LOCAL.5]
  99. 00991193  |.  FF15 3C849900 CALL DWORD PTR DS:[<&Qt5Networkd.QNetworkRequest::setSslConfiguration>]
  100. 00991199  |.  8D45 C8       LEA EAX,[LOCAL.14]
  101. 0099119C  |.  50            PUSH EAX
  102. 0099119D  |.  68 5C589900   PUSH OFFSET 0099585C                                                                     ; ASCII "method=getQuote&format=xml"
  103. 009911A2  |.  8D4D CC       LEA ECX,[LOCAL.13]
  104. 009911A5  |.  FF15 C8839900 CALL DWORD PTR DS:[<&Qt5Cored.QString::QString>]
  105. 009911AB  |.  8945 B0       MOV DWORD PTR SS:[LOCAL.20],EAX
  106. 009911AE  |.  8B4D B0       MOV ECX,DWORD PTR SS:[LOCAL.20]
  107. 009911B1  |.  894D AC       MOV DWORD PTR SS:[LOCAL.21],ECX
  108. 009911B4  |.  C645 FC 07    MOV BYTE PTR SS:[LOCAL.1],7
  109. 009911B8  |.  8B4D AC       MOV ECX,DWORD PTR SS:[LOCAL.21]
  110. 009911BB  |.  FF15 D8839900 CALL DWORD PTR DS:[<&Qt5Cored.QString::toUtf8>]
  111. 009911C1  |.  8945 A8       MOV DWORD PTR SS:[LOCAL.22],EAX
  112. 009911C4  |.  8B55 A8       MOV EDX,DWORD PTR SS:[LOCAL.22]
  113. 009911C7  |.  8955 A4       MOV DWORD PTR SS:[LOCAL.23],EDX
  114. 009911CA  |.  C645 FC 08    MOV BYTE PTR SS:[LOCAL.1],8
  115. 009911CE  |.  8B45 A4       MOV EAX,DWORD PTR SS:[LOCAL.23]
  116. 009911D1  |.  50            PUSH EAX
  117. 009911D2  |.  8B4D EC       MOV ECX,DWORD PTR SS:[LOCAL.5]
  118. 009911D5  |.  51            PUSH ECX
  119. 009911D6  |.  8B4D E8       MOV ECX,DWORD PTR SS:[LOCAL.6]
  120. 009911D9  |.  FF15 40849900 CALL DWORD PTR DS:[<&Qt5Networkd.QNetworkAccessManager::post>]
  121. 009911DF  |.  C645 FC 07    MOV BYTE PTR SS:[LOCAL.1],7
  122. 009911E3  |.  8D4D C8       LEA ECX,[LOCAL.14]
  123. 009911E6  |.  FF15 DC839900 CALL DWORD PTR DS:[<&Qt5Cored.QByteArray::~QByteArray>]
  124. 009911EC  |.  C645 FC 06    MOV BYTE PTR SS:[LOCAL.1],6
  125. 009911F0  |.  8D4D CC       LEA ECX,[LOCAL.13]
  126. 009911F3  |.  FF15 D4839900 CALL DWORD PTR DS:[<&Qt5Cored.QString::~QString>]
  127. 009911F9  |.  C745 FC FFFFF MOV DWORD PTR SS:[LOCAL.1],-1
  128. 00991200  |.  8D4D F0       LEA ECX,[LOCAL.4]
  129. 00991203  |.  FF15 44849900 CALL DWORD PTR DS:[<&Qt5Networkd.QSslConfiguration::~QSslConfiguration>]
  130. 00991209  |.  8B4D F4       MOV ECX,DWORD PTR SS:[LOCAL.3]
  131. 0099120C  |.  64:890D 00000 MOV DWORD PTR FS:[0],ECX
  132. 00991213  |.  59            POP ECX
  133. 00991214  |.  8BE5          MOV ESP,EBP
  134. 00991216  |.  5D            POP EBP
  135. 00991217  \.  C3            RETN





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 04 мая 2016 22:21
· Личное сообщение · #2

Здесь ebp - регистр-указатель на область локальных переменных, т.к. в настройках компилятора задано делать ebp-based функции. Начало таких функций всегда содержит
Code:
  1. push ebp
  2. mov ebp, esp


Локальные переменные - это те, которые объявлены в теле функции, и место под них всегда выделяется на стеке! Адресовать локальные переменные в целях отладки удобнее через ebp, так просто принято. Как правило каждая переменная 4 байта, а если и нет, то по умолчанию адрес каждой всё равно будет выровнен по границе в 4 байта, потому там и [ebp - 4].

Учебник в руки и вперёд!

-----
IZ.RU


| Сообщение посчитали полезным: hitkg

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 мая 2016 23:17
· Личное сообщение · #3

Спасибо, но это я знаю. Мне не понятно, почему компилятор вставил сюда 14 вызовов
Code:
  1. MOV DWORD PTR SS:[EBP-4],N





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 мая 2016 23:46
· Личное сообщение · #4

встречал такое. чтото компиляторно-специфичное
может номер строки в блоке кода или типа того
игнорируй в общем, особого смысла оно не несёт

| Сообщение посчитали полезным: JST


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 мая 2016 00:46
· Личное сообщение · #5

потому что это PUSH 00993655 имя функции аля сех
а то, точки отмотки исключения

| Сообщение посчитали полезным: v00doo, JST


Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 05 мая 2016 11:08
· Личное сообщение · #6

JST
Не понятно было, что Вы хотели спросить.

JST пишет:
Мне не понятно, почему компилятор вставил сюда 14 вызовов

Так бы и спрашивали...

Тут уже ответили. Добавлю только, что обработчику исключения так понятнее, где происходит ошибка, если он умеет это обрабатывать. А больше смысла даже не для хендлера, а Вам же, при отладке было бы понятно, что происходит... Qt вставляет, видимо, много всего, не спросив, а надо ли это нам...

Добавлено спустя 0 минут
Но это не номер строки! )

-----
IZ.RU


| Сообщение посчитали полезным: JST
 eXeL@B —› Вопросы новичков —› Что такое MOV DWORD PTR SS:[EBP-4], X?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати