Встроенные сбои сборки? - PullRequest
       11

Встроенные сбои сборки?

1 голос
/ 09 сентября 2011

У меня проблемы со встроенной сборкой в ​​Visual C ++ 2010 Ultimate (Windows 7 Professional).Все мои встроенные сборки не работают, когда я использую символы, строки DWORD и т. Д. И т. Д. Итак, я скопировал этот код из MSDN в свое консольное приложение:

// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp
// processor: x86
#include <stdio.h>

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
int main( void )
{
   __asm
   {
      mov  eax, offset world
      push eax
      mov  eax, offset hello
      push eax
      mov  eax, offset format
      push eax
      call printf
      //clean up the stack so that main can exit cleanly
      //use the unused register ebx to do the cleanup
      pop  ebx
      pop  ebx
      pop  ebx
   }
}

У меня нет ничего, кроме этих строк в моемapplication, result: строка не печатается и приложение вылетает.Есть идеи, почему это происходит?

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Проект + Свойства, C / C ++, Генерация кода, выберите / MTd.Повторите для конфигурации Release, выберите /MT.

Если вы хотите, чтобы она работала с нестатической версией CRT, вам нужно написать вызов следующим образом:

  call dword ptr printf

Экспорт из DLL должен вызываться косвенно.

0 голосов
/ 09 сентября 2011

Я предполагаю, что причиной является появление в ebx.Вы несете ответственность за поддержание целостности всех регистров, кроме eax.Попробуйте вместо этого ввести eax.

...