находится? А как он уменьшается, допустим, на 5 при команде enter 5,0? Как можно, допустим, 0x018181833 уменьшить на 5?
Это всего-лишь значение...
Я не понял...
Ну это указатель. Значение. 0x018181833 - указатель на ячейку памяти (адрес) 0x018181833 - 0x5 = 0x1818182E - указатель (адрес) на другую ячейку памяти.. Ты чего. Шаг вперёд, два назад
Т.е., в esp какая-то большая цифирка лежит, которую можно уменьшить на x?
mov eax, 1 mov ebx, 1 sub eax, ebx Ты спрашиваешь - "В EAX лежит 1, а в EBX 1, как можно отнять 1 от 1??" Ну т.е вопрос очень вообще странный. Ты запутался, наверное, из-за ЯВУ, или ещё из-за чего-то. Что тебе вдруг начало казаться, что указатель, или адрес, который лежит в регистре - никак не вычислить
А, можно вычислить? И как (может, поняв это, пойму и sub esp, x)?
Найди какую-нибудь банальную статью по ассемблеру для новичков, почитай. Я думал, ты уже продвинулся.. Банально поотлаживай вот этот код (хотя я вообще не понимаю, какой от этого смысл): mov esp, 1 ESP = 1 sub esp, 1 ESP = 0 mov eax, 1 EAX = 1 sub eax, 1 EAX = 0 mov esp, 0x12121212 ESP = 0x12121212 sub esp, 0x12121212 ESP = 0
Та это я понял.. Я не мону понять саму суть работы enter, вот, нахрен ему у адресса esp x отнимать, чтобы выделить в стеке память, если нужно в сам стэк идти и туда все ложить? Допустим, esp = 0x12121212, ну и отними у него 5? Что? Получится 0x1212127?
Или 5 в hex переводится, а затем у 0x12121212 отнимается 5 (hex'овый)?
Нет, получится 0x1212120D И это мы уже выше обсуждали - нужно создавать кадры стека, чтобы работать с локальными переменными, и не запоминать их индексы слишком далеко: push eax ; 4 push ebx ; 8 push ecx ; 12 push edx ; 16 mov dword[esp-20] ESP-20 = local var 1 ESP+20 = argument 1 Лучше: push ebp ; 4 mov ebp, esp sub esp, 4 ; Одна локальная переменная push eax ; 4 push ebx ; 8 push ecx ; 12 push edx ; 16 EBP-8 = local var 1 EBP+8 = argument 1 И так же есть другие причины, требующие создание стека. Я тебе уже скидывал статью по стеку, где описываются эти моменты EBP (Base Pointer), фактически предназначен для этого ( ESP - stack pointer)
Обсуждают сегодня