vg писал(а):
Если это может быть сигнатурой, то может ли .НЕТ фраймворк использовать её для правильного маршалинга данных подключаемой DLL в управляемый код?
понятия не имею .. и что любопытно - не хочу иметь
Я не знаю asm. Но вот вопрос. Если мы пропарсили код до ret и посмотрели инструкции непосредственно предшевствующие возврату из процедуры, то можно ли там обнаружить инструкции по очистке стека и по ним судить о __stdcall/__cdecl (типа, кто очищает стек после занесения туда аргументов вызываемой функции)?
можно (надо будет смотреть используется ли просто ret; или ret с
параметром), но так сложнее, потому что функция может возвращаться
из больше чем одного места.
enter и leave - это специальные x86 инструкции для работы с __stdcall
вызовами... посмотрел сейчас чего генерит vc++ 6.0 - и похоже, что он
их не использует, так что этот вариант отпадает.
другой вариант - вызвать как (скажем) __stdcall, дать отработать
и посмотреть что стало со stack pointer после возврата из функции.
причем можно вызвать с заведомо неправильными параметрами,
чтобы ничего полезного функция сделать не могла.
но это все равно хакерство, в production такую вещь сдавать - искать
проблем на свою задницу.