Итак, этим утром я отправил смущенный вопрос об собрании, и я получил отличную подлинную помощь, которую я очень ценю.Сборка - .data, .code и регистры ...?
И теперь я начинаю собираться в сборку и начинаю понимать, как это работает.
Вещи, которые, как я чувствую, я понимаю, включают в себя стек, прерывания, двоичный/шестнадцатеричный код и вообще то, что делают большинство основных операций (jmp, push, mov и т. Д.).
понятия, что я изо всех сил, чтобы понять и хотел бы помочь с ниже - это будет огромная помощь, если вы могли бы обратиться к любому из следующих действий:
- Что именно происходит в секции .data ? Объявляются ли эти переменные?
- Если да, можем ли мы объявить переменные позже в разделе кода? Если нет, почему бы и нет? Если да, то как и почему мы используем раздел данных?
- Что такое регистр? Как он сравнивается с переменной? Я имею в виду, я знаю, что это место, где хранится небольшая информация ... но это звучит точно как переменная для меня.
- Как создать массив? Я знаю, что это кажется случайным, но мне любопытно, как я буду делать что-то подобное.
- Есть ли список каких-либо распространенных практик для того, для чего нужно использовать каждый регистр? Я до сих пор не получаю их полностью, но заметил, что некоторые люди говорят, например, что определенный регистр должен использоваться для хранения «возвращаемых значений» из процедур - существует ли исчерпывающий или, по крайней мере, информативный список таких методов?
- Одна из причин, по которой я изучаю сборку, - это лучше понять, что происходит за моим кодом высокого уровня. Имея это в виду - когда я программирую на C++, я часто думаю о стеке и куче. В сборке я знаю, что такое стек - где «куча»?
Дополнительная информация: Я использую masm32 с WinAsm в качестве среды IDE, и я работаю над Windows 7. У меня есть много опыта программирования на языках более высокого уровня, таких как C++/java.
Редактировать: Спасибо за помощь всем, чрезвычайно информативным, как обычно! Качественный товар! Еще одна вещь - мне интересно, какая разница между указателем стека и указателем Base, или ESP и EBP. Кто-нибудь может мне помочь?
Редактировать: Я думаю, что получаю это сейчас ... ESP всегда указывает на вершину стека. Однако вы можете указать EBP на все, что захотите. ESP автоматически обрабатывается, но вы можете делать все, что хотите, с помощью EBP. Например:
push 6
push 5
push 4
mov EBP, ESP
push 3
push 2
В этом сценарии, EBP теперь указывает на адрес холдинга 4, но ESP теперь указывает на адрес холдинга 2.
В реальном приложении 6, 5 и 4 можно было бы аргументы функции, тогда как 3 и 2 могут быть локальными переменными внутри этой функции.
Могу я спросить, есть ли у вас книга, а если да, то какая книга может быть? :) –
Нет, извините! Просто интернет. http://stackoverflow.com/questions/2352048/assembly-32-bit-vs-64-bit -> В этой статье я изложил ресурсы, которые я использовал. Я только начал изучать сборку сегодня, поэтому я буду продолжать работать над этим списком, поскольку собираю больше ресурсов. – Cam
Я тоже начинаю изучать сборку. Существует бесплатная pdf-книга под названием «программирование с нуля», которая кажется довольно хорошей. Сейчас это мой главный ресурс. – morgancodes