![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]()
#include <iostream>
#include <stdio.h> using namespace std; int main() {char x; char* fmt = "%s"; _asm { lea eax, x push eax push fmt call scanf add esp, 30; lea eax, x push eax push fmt; call printf; add esp, 30; } return 0; } После выполнения выводит ошибку помогите исправить. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]()
программа сама работает
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]()
Такая ошибка Stack around the variable 'x' was corrupted
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
RazerVG, а на кой предмет Вы стек на 30 байт выравниваете после вызовов функций? 8-ми хватит за глаза.
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]() |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
RazerVG, Вы передаёте функции через стек два параметра каждый размером dword. Итого 8 байт. Да, и надо передать адрес строки форматирования, а не саму строку.
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]() Цитата:
lea eax, x; //заносим адрес переменной x в eax push eax;// кладем адрес переменной x в стек push fmt; //кладем адрес строки форматирования в стек call scanf; //вызываем функцию scanf. Заметьте, что аргументы передаются в обратном порядке add esp,8;// убираем аргументы из стека. 4 - размер одного аргумента; 2 - их количество вот нашел описание Вопрос вот в чем когда мы вызываем call scanf что мы считываем x или fmt ? |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]()
Зачем вообще здесь x ?
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]() Код:
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
![]()
а значение какого регистра мы считываем вот этим call ds:scanf?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод сообщения в assembler | Hrum | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 09.11.2012 23:45 |
Вывод сообщения в трей | Avalon_Albio | Помощь студентам | 0 | 17.04.2012 10:02 |
вывод сообщения по дате | WALL | Помощь студентам | 9 | 09.11.2010 09:28 |
Вывод сообщения по времени | DimOn4Ik | БД в Delphi | 12 | 31.03.2010 23:00 |
Вывод сообщения об ошибке... | Ho-ho | Помощь студентам | 12 | 02.11.2009 16:54 |