yasm.exe und incbin fehler??

02/09/2012 - 21:50 von Jens Kallup | Report spam
Hallo Gemeinde,

habe folgendes Script, das mich noch zur
verzweiflung bringr:
wenn ich incbin nicht kommentiere, dann
gibts einen crash, andern falls, geht es.
muss gestehen, ich verwende ein zusatztool.
vieleicht kann der eine oder andere helfen?

Gruß
Jens

%include 'head.inc'

; PE
BITS 32
;kid: dd 19790208
;keoc: dd EndOfCode - EntryPoint
EntryPoint:

%ifdef INCLUDE_BIN
nop
nop
call [__imp__startkbase]
mov eax, 42
ret
nop
nop
ret
incbin "tmp.$$$.gz"
%else
%include 'pecode.asm'
%endif

EndOfCode:

%include 'macros.inc'
%include 'import.inc'






und hier das tool in c:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>

int getFileSize(FILE *input)
{
int fileSizeBytes;
fseek(input, 0, SEEK_END);
fileSizeBytes = ftell(input);
fseek(input, 0, SEEK_SET);
return fileSizeBytes;
}

int main(int argc, char **argv)
{
if (argc < 2)
{
printf("usage: build.exe <inputfile>");
return -1;
}

system("yasm.exe -U INCLUDE_BIN -o z.exe z.asm");

FILE *i = fopen(argv[1],"rb");
FILE *o = fopen(".\\tmp.$$$", "wb");

if (!i)
{
printf("can't open file: %s.",argv[1]);
return -1;
}

char buffer[0x200];
fseek(i,0,0);
fread(buffer,0x200,1,i);

int c;
int s = 0;
int version;
int endofcode;

fseek(i,0x200,0);
fread(&version,sizeof(int),1,i);
fread(&endofcode,sizeof(int),1,i);

if (version != 19790208)
{
printf("Error: wrong version.");
fclose(i);
return -1;
}

int np = getFileSize(i);
while (s != np)
{
c = fgetc(i);
fprintf(o,"%c",c);
s++;
}

fclose(o);
fclose(i);

system("gzip -9 < tmp.$$$ > tmp.$$$.gz");
system("yasm -D INCLUDE_BIN -o z.exe z.asm");

//system("del tmp.$$$");
//system("del tmp.$$$.gz");

return 0;
}
 

Lesen sie die antworten

#1 Jens Kallup
04/09/2012 - 12:57 | Warnen spam
Hallo,

es ist vollbracht - nun làuft es.
Habe einfach einen Wert übersehen

Gruß
Jens

Ähnliche fragen