Programm stürzt laufend ab ...

14/03/2010 - 14:18 von Jens Kallup | Report spam
Hallo,

habe hier ei mixing von code und ich weiss nicht,
warum das Programm immer noch abstürzt.

Übersetzen tue ich wie folgt:

nasmw -f obj test1.asm -o test1.obj
alink 21.o test1.obj .\o\*.o -oPE -entry _WinMain@16 -subsys gui -o
test1.exe


Das AsmFile:
-
%include "win32n.inc"

import _free cygwin1.dll
import _malloc cygwin1.dll
import _exit cygwin1.dll
import _getcwd cygwin1.dll
import _puts cygwin1.dll
import _strcpy cygwin1.dll

extern _free
extern _exit
extern _getcwd
extern _malloc
extern _puts
extern _strcpy

extern _null_string
import _null_string kmicelib.dll
extern _cat_string
import _cat_string kmicelib.dll
extern _print_string
import _print_string kmicelib.dll

section code use32 class=code

global _start_main
_start_main:
push ebp
mov ebp, esp
sub esp, 512
CALL _null_string
fld qword [ LC0]
fstp qword [_debug]
fld qword [ LC1]
fstp qword [_var1]
fld qword [ LC2]
fstp qword [_var2]
fld qword [ LC3]
fld qword [_var1]
fmulp st0
fstp qword [Lc_var3]
LL3:
fld qword [Lc_var3]
fld qword [ LC4]
fucompp
fnstsw ax
sahf
ja near Le_4
jmp near Le_3
Le_4:
push dword LCS6
call _cat_string
add esp, 4
call _print_string
call _null_string
Le_3:
push dword 0
call _exit
ret

section data use32 class=data

LC0: dq 0.0000000000
_debug: dq 0.0
LC1: dq 2.0000000000
_var1: dq 0.0
LC2: dq 1.0000000000
_var2: dq 0.0
Lc_var3: dq 0.0
LC3: dq 2.0000000000
LC4: dq 7.0000000000
LCS6: db ">",0

Das C-File:
-

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include "dll.h"

extern "C" void start_main(void);

#if defined(__WIN32__) || defined(__WINDOWS__)
#include <windows.h>
extern "C" int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
#else
extern "C" int main(int argc, char **argv)
#endif
{
#if defined(__WIN32__) || defined(__WINDOWS__)
char buffer[255];
int argc = 1;
char *argv[1];

if ((argv[0] = (char*) malloc(255)) == NULL)
{
printf("Nicht genügend Speicherplatz verfügbar");
exit(1);
}

getcwd(buffer,255);
strcpy(argv[0],buffer);
#endif

printf("starte Programm ...");
system_start_main(argc,argv,start_main);

#if defined(__WIN32__) || defined(__WINDOWS__)
free(argv[0]);
#endif

exit(0);
return 0;
}


Die dll.h

#ifdef BUILD_DLL
/* DLL export */
#define EXPORT __declspec(dllexport)
#else
/* EXE import */
#define EXPORT __declspec(dllimport)
#endif

extern "C" {
EXPORT double calc_tan(double);
EXPORT char* cat_string(char*);
EXPORT char* cat_string_int(int);
EXPORT void handle_this_wert(int,int,int,int,double);
EXPORT void init_grundsystem(void);
EXPORT void mache_pause(void);
EXPORT void null_string(void);
EXPORT char* print_dtoc(void);
EXPORT char* print_time(void);
EXPORT char* replicate_string(double,char*);
EXPORT char* replicate_strings(double c);
EXPORT char* replicate_string_int(double,double);
EXPORT char* replicate_string_str(char*,double);
EXPORT void print_ident(double);
EXPORT void print_string(void);
EXPORT void set_century(int);
EXPORT char set_char_string(int);
EXPORT void set_date_sys(char*);
EXPORT void set_date_var(char*);
EXPORT void set_dateformat(int);
EXPORT void set_text_string(int,int,int,char*);
EXPORT void set_textbold_string(int,int,int,int);
EXPORT void setlocaltime(char*);
EXPORT void space_string(int);

EXPORT int system_start_main(int,char**,void(*)(void));

EXPORT char* stringReplace(char*,char*,char*);
EXPORT void TAdjustPrivileges(char*);
EXPORT void set_textlabel_position(int,int,int,int,int);
EXPORT void set_label_onclick(int,int,void (*)(void));
};


Danke für Infos
Jens
 

Lesen sie die antworten

#1 Markus Wichmann
14/03/2010 - 23:42 | Warnen spam
Jens Kallup () schrieb:
Hallo,

habe hier ei mixing von code und ich weiss nicht,
warum das Programm immer noch abstürzt.

Übersetzen tue ich wie folgt:

nasmw -f obj test1.asm -o test1.obj
alink 21.o test1.obj .\o\*.o -oPE -entry -subsys gui -o


^^^^ ^^^^^^^

Wo kommt das nun schon wieder her?

test1.exe





übersetze es doch mal wie folgt:

nasmw -g -fobj -o test1.obj test1.asm
alink 21.o test1.obj .\o\*.o ... (naja, du kennst den Rest)

Und jetzt starte das Programm in einem Debugger deiner Wahl.

Ich werde mich jedoch ganz sicher nicht durch mehrere Kilobyte
Assemblerlisting quàlen.


Danke für Infos
Jens




HTH,
Markus
Progress (n.): Process through which USENET evolved from smart people in
front of dumb terminals to dumb people in front of smart
terminals.

news://freenews.netfront.net/ - complaints:

Ähnliche fragen