Размер буфера у wsprintf - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть такой код:
    invoke wsprintfA, buf, "0x%p", 0xAABBCCDD
    mov [buf2], buf
 
    mov eax, [buf2]
    mov [buf3], eax
 
    mov eax, [buf3]
    mov [buf4], eax
 
    mov eax, [buf4]
    mov [buf5], eax
 
    invoke MessageBoxA, 0, [buf5], ttl, MB_OK
    invoke ExitProcess, 0

    ttl  db 'tittle', 0
    buf  dd 3 dup(?)
    buf2 dd ?
    buf3 dd ?
    buf4 dd ?
    buf5 dd ?
При изменении "buf dd

3

dup(?)" на "buf dd

2

dup(?)" видим следующую картину: Почему так? Это резервация места под все три параметра ф-и wsprintf?

Решение задачи: «Размер буфера у wsprintf»

textual
Листинг программы
    invoke wsprintfA, buf, "0x%p", 0xAABBCCDD
 
 
    invoke MessageBoxA, 0, buf, ttl, MB_OK
    invoke ExitProcess, 0
 
 
    ttl  db 'tittle', 0
    buf  dd ?

Объяснение кода листинга программы

В данном коде:

  1. Выполняется вызов функции wsprintfA с передачей в неё адреса переменной buf и строки 0x%p в качестве первого аргумента.
  2. Выполняется вызов функции MessageBoxA с передачей в неё значения 0 в качестве первого аргумента, адреса переменной buf в качестве второго аргумента, строки tittle в качестве третьего аргумента и значения MB_OK в качестве четвёртого аргумента.
  3. Выполняется вызов функции ExitProcess с передачей в неё значения 0 в качестве аргумента.
  4. Переменная ttl содержит строку tittle.
  5. Переменная buf содержит адрес, по которому будет выведено значение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы