Как программа IA-32, казалось бы, скомпилированная с MSVC, отправляет свой единственный аргумент через EAX?


0

Программа на C++, которую я ищу, по-видимому, скомпилирована с помощью MSVC. Он ссылается на файл MSVCR100.dll, содержит код cookie безопасности MSVC и использует схему переключения Microsoft. Однако одна из функций, которые я ударил, отправляет свой единственный аргумент в регистр EAX, который немедленно передается как аргумент LoadLibraryW (после инициализации кадра BP).

При взгляде на код есть последовательности и строки, на которые ссылаются другие функции (свидетельство вставки), поэтому я не думаю, что это задание с прямым сборочным кодом.

Насколько я знаю и согласно моим источникам, у MSVC нет соглашения о вызове, которое отправляет аргументы через EAX. У Watcom и Delphi есть опции, но не MSVC. Возможно ли, что компилятор оптимизировал функцию в вызове регистра? Или есть еще одно недокументированное соглашение о вызове в MSVC?

+4

мы не можем видеть экран здесь, поэтому покажите код! 05 дек. 172017-12-05 08:50:02

  0

в следующий раз просто отредактируйте исходный вопрос, а не отправляйте новый 07 дек. 172017-12-07 15:33:21

  0

@IgorSkochinsky. Я чувствовал, что новая информация изменила характер исходного вопроса настолько, чтобы гарантировать новый вопрос. 07 дек. 172017-12-07 20:37:01

2

Мы можем видеть от this list, что соглашение о вызове Delphi/Free Pascal IA-32 является регистрацией . Моя догадка вы имеете дело с бинарным, что это результат что-то вроде этого: How to call a function using Delphi's register calling conventions from Visual C++?

Чтобы частично процитировать топ проголосовали ответ:

Делфи register calling convention, также известный как Borland азЬсаИ, на x86 uses EAX, EDX and ECX registers , в этой последовательности.

Некоторые дополнительные чтения, которые могут помочь нарисовать более четкую картину того, что вы смотрите на:

+1

Возможно, мне придется изменить свой вопрос. После публикации я нашел функцию, которая передает первый аргумент в EAX, а затем вызывает второй аргумент. Я скажу, что ваш ответ здесь правильный для поставленного вопроса и задать новый вопрос. 05 дек. 172017-12-05 23:22:31