Ассемблер - экстремальная оптимизация


компилятор выбрал ASCII-вариант, что соответствует его настройкам по умолчанию


А вот при вызове функций типа system квадратные скобки ставить уже не надо, точнее нельзя! Функция system является частью библиотеки времени исполнения (RTL — Run Time Library), линкуемой статическим образом, поэтому call system сработает как и ожидалось, а вот call ds:[system]

передаст управление по адресу 83EC8B55h, попытавшись проинтерпретировать начало функции system как указатель:

.text:0040100B 3E FF 15 1A 10 40 00      call   dword ptr system

                                  ; косвенный вызов статически линкуемой функции

                                  ; приводит к тому, что первые 4 байта функции

                                  ; интерпретируются как указатель и управление

                                  ; передается по адресу 83EC8B55h

...

.text:00401018 system                    proc   near   ; начало

функции system

.text:00401018 55                 push   ebp

.text:00401019 8B EC              mov    ebp, esp

.text:0040101B 83 EC 10           sub    esp, 10h

.text:0040101E 56                 push   esi



Содержание раздела