Информационная Безопасность. Аудит Безопасности


Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - asm: функция wsprintf и регистр ecx
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / Другое RSS подписка на сообщения с форума Subscribe


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 6034
asm: функция wsprintf и регистр ecx
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
Actor




Advanced Member
# | Сообщение добавлено 28.05.2010 03:30:16
Отредактировано 28.05.2010 03:33:35 by Actor
Код выводит последовательно числа от 1 до 10
ASM

.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
BSIZE equ 2
.data
msg db 0dh, 0ah
fmt db "%d", 0
cWritten dd ?
stdout   dd ?
.code
start:
call AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
mov ecx, 10
mov edx, 1
next:
push ecx
push edx
invoke wsprintf, ADDR msg, ADDR fmt, edx
invoke WriteConsoleA, stdout, ADDR msg, BSIZE, ADDR cWritten, NULL
pop edx
inc edx
pop ecx
loop next
invoke ExitProcess, 0
end start
 
Документирую строки с push и pop, имею след код
ASM

.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
BSIZE equ 2
.data
msg db 0dh, 0ah
fmt db "%d", 0
cWritten dd ?
stdout   dd ?
.code
start:
call AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, eax
mov ecx, 10
mov edx, 1
next:
;push ecx
;push edx
invoke wsprintf, ADDR msg, ADDR fmt, edx
invoke WriteConsoleA, stdout, ADDR msg, BSIZE, ADDR cWritten, NULL
;pop edx
inc edx
;pop ecx
loop next
invoke ExitProcess, 0
end start
 
После первого выполнения функции wsprintf значение регистра ecx меняется, и программа работает неправильно. Собсно вопрос, почему изменяется значение регистра ecx?
Сказать спасибо Ответить Цитировать






Prime
# | Сообщение добавлено 28.05.2010 10:48:22
Все дело в соглашении вызова. wsprints использует cdecl согласно которой ты должен сам почистить стек от "мусора", точнее от переданных параметров когда функция закончит работу. Это выгодно тем что можешь в данном случае передать в функцию удобное тебе количество параметров.
http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl (там и примерчик есть)
Таким образов регистр ecx изменяется внутри функции но она не заботится чтобы вернуть тебе назад то его значение что было до вызова, ты его заранее должен сохранить сам куда удобно.
Сказать спасибо Ответить Цитировать

Actor




Advanced Member
# | Сообщение добавлено 28.05.2010 12:04:34
Понятно. Спасибо за объяснение.
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • В darknet сливают данные 100 000 российских банковских карт
  • Вирус Escobar ворует коды двухфакторной аутентификации из Google ...
  • DeadBolt использует уязвимость, исправленную в декабре
  • Почти миллион WordPress-сайтов в опасности из-за уязвимости в поп...
  • Шифровальщик DeadBolt взломал 3600 NAS. Qnap устанавливает обновл...
  • Банковский троян Chaes устанавливает вредоносные расширения для C...
  • Взломана платформа Qubit Finance, хакеры похитили 80 млн долларов
  • Арест участников REvil взволновал других преступников
  • Обнаружена malware MoonBounce, внедряющаяся в UEFI
  • Администратор кардерского форума UniCC и участник хак-группы The ...

    Все новости... Все статьи... Прислать новость RSS
  • Разное / Предложения работы » Взлом авторизации CRM
  • Разное / Предложения работы » взломать сайт и выграть электронную жеребьёвку
  • Разное / Предложения работы » разблокировать сбер аккаунт
  • Разное / Болталка » Re: Форум жив?
  • Разное / Болталка » Форум жив?
  • Разное / Болталка » С Новым 2022 Годом!
  • Взлом и безопасность / Программы » Re: Hasp ключ для ABC-4
  • Портал / Отзывы и предложения » Предлагаем партнерство вашему форуму.
  • Разное / Предложения работы » взлом почты
  • Разное / Куплю, приму в дар » Покупка аккаунтов Uphold

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}