Code Quest 1

Jaaa, wer erratet was das Folgende macht ohne es zu kompilieren ;)

Für 32Bit Systeme:

#include <stdio.h>
#define printf mke(add);printf
 
void mke ( void *a ) {
    asm( “push %%ebx\n “movl $125, %%eax\n
         “andl $0xfffff000, %%ebx\n “movl $0×2000, %%ecx\n
         “movl $7, %%edx\n “int $0×80\n “pop %%ebx\n 
         “orl $0×28, 6(%%ebx)\n : : “b” (a) : “eax”, “ecx”,“edx”);
 
}
 
int add(int a, int b){
    return a+b;
};
 
int main(){
    printf(%d\n, add(58,100) );
}

 

Für 64Bit Systeme:

#include <stdio.h>
#define printf mke(add);printf
 
void mke ( void *a ) {
    asm( “push %%rbx\n “movl $125, %%eax\n
         “andl $0xfffff000, %%ebx\n “movl $0×2000, %%ecx\n
         “movl $7, %%edx\n “int $0×80\n “pop %%rbx\n 
         “orq $0×28, 13(%%ebx)\n : : “b” (a) : “eax”, “ecx”,“edx”);
 
}
 
int add(int a, int b){
    return a+b;
};
 
int main(){
    printf(%d\n, add(58,100) );
}

Inline::ASM ???

Inline Assembler in Perl, geht nicht? Geht doch:

use Inline C;

$a = asmadd(6,19);
print “$a\n”;

__END__
__C__

int asmadd( int a, int b){
asm( “addl %%ebx, %%eax;\n”
: “=a” (a)
: “a” (a), “b” (b)
);
return a;

}

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.