информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСетевые кракеры и правда о деле ЛевинаПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Phrack #70/0x46 
 Возможно, Facebook наступил на... 
 50 лет электронной почте 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
С этим всё предельно понятно. Первый аргумент - строка... 19.11.14 14:02  Число просмотров: 1017
Автор: Den <Denis> Статус: The Elderman
Отредактировано 19.11.14 14:03  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> Так и не понял о чем вы спрашивали и что отвечали.
>
> va_start/va_arg/va_end работают с аргументами на стеке
> согласно "C calling conversion" и ABI (Application Binary
> Interface) для конкретной платформы/компилятора.

С этим всё предельно понятно. Первый аргумент - строка формата, описывающая последовательность и размеры передаваемых в этом же кадре стека аргументов, значения которых используются при выводе на печать.

> В printf после убирания "звездочки" заработало потому, что
> сама "звездочка" требует аргумента на стека (который
> определяет необходимую "ширину" вывода).

"Звездочка" стоит в позиции, отвечающей за минимальное количество выводимых на печать символов.
(number) - "Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger."
* - "The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted."
Если я правильно понимаю написанное:
Ширина не указана в строке формата, но как дополнительный аргумент целочисленного значения, предшествующий аргументу, который должен быть отформатирован.
Этот параметр нужен для резервирования минимального количества символов печатаемого аргумента, чтобы поддерживать стабильную ширину (например при выводе табличных данных на консоль). То есть не важно, какого размера в стеке аргумент, т.к. размер в стеке аргумента определяется следующими символами (в моем случае "ll" - long long).
На мой взгляд, наличие или отсутствие "звёздочки", в данном случае, никак не должны были влиять на выводимый аргумент, но наличие "звёздочки" толи портит старшее DWORD аргумента, толи сдвигает на DWORD указатель на аргумент.

Может я что-то не правильно понял?
<programming> Поиск 








Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach