Вы не можете, по крайней мере, не напрямую.
вызов принимает адрес в качестве параметра. Даже если вы пишете «call functionName», компоновщик заменяет имя функции фактическим адресом функции. Вам нужно будет перенести эту строку на свой адрес. В общем, C и C++ не поддерживают какие-либо метаданные среды выполнения относительно сопоставлений имен функций, которые позволят это сделать. Если функция экспортируется из DLL, вы можете использовать GetProcAddress, чтобы найти ее адрес.
Если список функций является статическим, вы можете сами создать сопоставление заранее.
Что-то вроде:
std:map<string, PVOID> functionMappings;
functionMappings["MyFunction"] = MyFunction;
// Later
PVOID function = functionMappings["MyFunction"];
__asm
{
push a;
call [function]
}
Некоторые примечания:
Я считаю, что стандарт говорит, что указатель на функцию может быть больше, чем PVOID. Это должно работать на платформах Windows x86/x64.
Вы не сказали, какое соглашение вы использовали - этот код предполагает stdcall.
Это очень, очень странная вещь, которую нужно выполнить - какую проблему вы пытаетесь решить?
Перефразируйте вопрос. Что вы подразумеваете под _single int как аргумент char * _? Вы пропустили важную деталь - на каком процессоре вы смотрите? Вам нужна общая идея или реальный x86-подобный ассемблерный код? – dirkgently
Я не понимаю образец. Вызов не может быть для строки, это должен быть указатель на функцию. Вам нужно будет получить указатель на функцию, чтобы вызвать ее. Одна из возможностей - использовать GetProcAddr в своей собственной DLL. –
Извините за путаницу, я имею в виду, что функция принимает один аргумент типа int: вызываемая функция не важна, я просто объясняю, почему я нажимаю «a: в стек.» –