🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #108

Re: AT&T i call

#108
From: Lopez
Date: Sun, 05 Feb 2006 21:49
84 lines
2663 bytes
Bogdan (bogdro) napisał(a):
> Lopez napisał(a):
> 
>>Witam
>>
>>Mam instrukcje w skladni intela
>>
>>call dword [table+eax*4]
>>
>>to w at&t to bedzie
>>
>>call *table(,%eax,4)
>>czy
>>call table(,%eax,4)
>>
>>bo nie mam pewnosci.
> 
>  Z tego, co kiedyś wyczytałem:
> http://rudy.mif.pg.gda.pl/~bogdro/linux/attintel.html
>  Jeśli dobrze to zrozumiałem, stawiałbym na gwiazdkę. Jeśli w zamian
> dostaniesz SIGSEGV, to pewnie chodziło o to drugie rozwiązanie. :)
> Najszybciej byłoby, gdybyś przetestował (najpierw sprawdzając, czy oba
> warianty siÄ™ kompilujÄ…).

Bez gwiazdki tez sie kompiluje, i wypluwa identyczny kod,
aczkolwiek daje komunikat
call.S:14: Warning: indirect call without `*'
Co najlepsze intel2gas tlumaczy mi to na call table(%eax,4),
co daje komunikat
call.S:14: Warning: scale factor of 4 without an index register
a uruchomienie programu konczy sie segfaultem.

Ponizej przyklad potwierdzajacy wariant z gwiadka, tak dla
potomnosci. Jakby komus nie dzialalo, dajcie znac.

plik call.S:

.code32
.text
.extern f1
.extern f2
.globl functable
functable:	.long f1, f2
.globl asmfunc
asmfunc:
     pushl %eax
     xorl %eax, %eax
     call *functable(%eax,4)
     movl $1, %eax
     call *functable(%eax,4)
     popl %eax
     ret

plik main.c:

#include <stdio.h>
extern void asmfunc(void);
int main()
{
     asmfunc();
     return 0;
}
void f1(void) { printf("f1\n"); }
void f2(void) { printf("f2\n"); }

i wreszcie Makefile:

.SUFFIXES: .c .S
CC              = gcc
OBJS            = main.o call.o
TARGET          = call
all: $(OBJS)
         $(CC) -o $(TARGET) $(OBJS)
.c.o:
         $(CC) -c -o $(@) $(<)
.S.o:
         $(CC) -c -o $(@) $(<)
clean:
         rm -f $(OBJS) $(TARGET)


-- 
Pozdrawiam
Lopez
Technical Details
Message-ID: <ds5rsb$3ue$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <ds5ct5$hog$1@inews.gazeta.pl> <ds5j3r$h04$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Lopez <rtlopezREMOVE@gazeta.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: AT&T i call
Date: Sun, 05 Feb 2006 22:49:04 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 84
Message-ID: <ds5rsb$3ue$1@inews.gazeta.pl>
References: <ds5ct5$hog$1@inews.gazeta.pl> <ds5j3r$h04$1@inews.gazeta.pl>
NNTP-Posting-Host: user10.53.udn.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1139176139 4046 82.139.10.53 (5 Feb 2006 21:48:59 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Sun, 5 Feb 2006 21:48:59 +0000 (UTC)
In-Reply-To: <ds5j3r$h04$1@inews.gazeta.pl>
X-Accept-Language: pl, en-us, en
X-User: rtlopez
User-Agent: Mozilla Thunderbird 1.0.2 (X11/20051002)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit