Если я хорошо понимаю, инструкция
mov
загрузила 32-битное представление того, что было по адресу 0x80486b2, в адрес, на который указывает указатель стека ... Правильно ли это?Нет. Инструкция
mov dword [esp], 0x80486b2
копирует непосредственное значение
0x80486B2
на адрес, на который указывает регистрESP
. Это место является первым параметром, переданным функцииscanf
.Итак, в основном мы получаем, что
mov
только что перемещает данные из памяти в другое место памяти, [. ..]No. Команда перемещает сразу 32-битное значение в ячейку памяти. Подпись команды MOV в этом случае:
MOV r/m32, imm32 Move imm32 to r/m32.
Значение
0x80486b2
записывается в адрес памяти DWORD, на который указывает регистр ESP.Команда
mov dword [esp + 0x4], eax
передает второй параметр изEAX
вscanf
.
Тот факт, что перед связыванием происходит сбой, означает, что команда
blockquote>target_link_libraries
в CMake фактически влияет не только на связывание. Это также влияет на компиляцию.Да, это правда, что новые каталоги добавления добавляются, когда вы связываете с библиотекой target вместо файла библиотеки . Вот почему этот подход называется «современным» - один вызов
target_link_libraries
выполняет все, что необходимо для использования библиотеки (в вашем случае Boost).Причиной неудачи с «современным» подходом может быть то, что «настоящие» заголовки Boost конфликтуют с другими заголовками, которые вы используете. Вы можете обнаружить это с помощью проверки цепочки включаемых файлов в сообщении об ошибке.