• 0
hakouabs

Error1error C2415: improper operand type [inline Assembly]

سؤال

السلام عليكم ورحمة الله تعالى وبركاته 
 

#include<Windows.h> 
#include<iostream>
int main(){
	MessageBox(0, L"", L"", 0);
	char hello[] = "Hello";
	char world[] = "world";
	FARPROC Ms = GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxA");
	__asm {
		push 0
			mov  eax, offset world
			push eax
			mov  eax, offset hello
			push eax
			push 0
			call Ms
			pop  ebx
			pop  ebx
			pop  ebx
			pop  ebx
	}
}

الخطاء  Error    1    error C2415: improper operand type  
ممكن طريقة اصلاح هذا الخطاء    

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 2

offset تستخدم إذا كان بإمكانك تحديد العنوان أثناء الترجمة كما في حالة المتغيرات العامة، لكن عندك world و hello متغيرات محلية، إما أن تجعلها متغيرات عامة:

#include<Windows.h>
char hello[] = "Hello";
char world[] = "world";
int main(){
    MessageBox(0, L"", L"", 0);
    FARPROC Ms = GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxA");
    __asm {
        push 0
        mov  eax, offset world
        push eax
        mov  eax, offset hello
        push eax
        push 0
        call Ms
    }
}

أو تستخدم lea إذا كنت تريد إبقاءهما محلية:

#include<Windows.h>
int main(){
    MessageBox(0, L"", L"", 0);
    FARPROC Ms = GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxA");
    char hello[] = "Hello";
    char world[] = "world";
    __asm {
        push 0
        lea  eax, world
        push eax
        lea  eax, hello
        push eax
        push 0
        call Ms
    }
}

أيضاً لابد من حذف تعلميات التنظيف pop لأن MessageBoxA تستخدم طريقة stdcall في الإستدعاء وهنا المستدعى عليه مسؤولية تنظيف المكدس وليس أنت المستدعي.

تم تعديل بواسطه Mr.B
4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك اخي 

Mr.B

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .