Avatar billede dr.truti Nybegynder
01. december 2002 - 20:14 Der er 6 kommentarer og
1 løsning

Error under compalering i C++

Hej Eksperter...!

Jeg har dette lille problem, med at jeg får denne fejl i Microsoft Visual C++ 6 når jeg prøver at compilere mit demostrerings program:

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

--------------------Configuration: exploit1 - Win32 Debug--------------------
Compiling...
exploit1.cpp
C:\Documents and Settings\Administrator\Desktop\exploit1.cpp(35) : error C2415: improper operand type
Error executing cl.exe.

exploit1.exe - 1 error(s), 0 warning(s)

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Min kildekode til programmet ser således ud:

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include <process.h>

void main(void)
{
char *Buffer = "", *Data = "test";

cout << "\n-----> EXPLOIT <-----\n";
cout << "Buffer overflow exploit v0.01b\n\n";
cout << "Executing main.exe ... \n";

if (system("main.exe"))
{
  cout << "\nExecution of main.exe succeded!\n";
}
else
{
cout << "\nExecution of main.exe failed!\n";
}

cout << "Done executing main.exe ...\n";

_asm
{
  mov eax, 0x0012FF94
  mov Buffer, eax
  push 0x0
  lea eax,[edi][0x0000000C0]
  push eax
  push ebx
  call 0x000414370
}

cout << "Buffer contains: " << Buffer << ";\n";
cout << "Data contains: " << Data << ";\n";
cout << "-----> EXPLOIT <-----\n";

gets( Buffer );
}

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Jeg håber der er nogle der kan forklare hvad jeg kan gøre ved dette problem....

150 Point, da det betyder meget for mig at få svar iaften.

Truti
Avatar billede dr.truti Nybegynder
01. december 2002 - 20:20 #1
Fejlien ligger i denne linie:
}

i denne "blok":
_asm
{
  mov eax, 0x0012FF94
  mov Buffer, eax
  push 0x0
  lea eax,[edi][0x0000000C0]
  push eax
  push ebx
  call 0x000414370
} <---- DER ER FEJLEN!

Truti
Avatar billede arne_v Ekspert
01. december 2002 - 20:38 #2
Hvis du går igang med at udkommentere linier i asm sekvensen,
så vil du se at det er linien:

call 0x000414370

der er problemet.
Avatar billede dr.truti Nybegynder
01. december 2002 - 20:40 #3
arne_v: Hvis du skulle give et muligt løsnings forslag hvad vile det så være ?

Truti
Avatar billede arne_v Ekspert
01. december 2002 - 20:41 #4
Tilsyneladende så er MSVC++ ikke så glad for call af en
absolut adresse.

[desværre rækker mine masm kundskaber ikke til en workaround]
Avatar billede dr.truti Nybegynder
01. december 2002 - 20:45 #5
Hvis du kommer i tanke om noget er du meget velkommen til at skrive ind igen :-)

Truti
Avatar billede soreno Praktikant
01. december 2002 - 20:46 #6
Hvad er formålet med koden, altså asm delen ?

For mig og se giver det ikke rigtigt mening - i et Windows program..

Du flytter nogle mere eller mindre tilfældige adresser over i nogle registre og kalder til sidst en også mere eller mindre tilfældig adresse. Virker lidt mystisk..

Hvor får du de pågældende adresser fra ?

Uden at vide noget sikkert så tror jeg fejlen er denne linie:
lea eax,[edi][0x0000000C0]

Hvad er formålet med "[edi]" ?

Prøv istedet noget ala:
lea eax, dword ptr [0x0000000C0]
Avatar billede dr.truti Nybegynder
07. december 2002 - 18:03 #7
Jeg har selv fundet svar på mit prob......

Svaret var at 0x000414370 ikke ville retunere... Dette er nu iorden.....

Truti
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester