Article View: pl.comp.lang.asm
Article #108Re: AT&T i call
From: Lopez
Date: Sun, 05 Feb 2006 21:49
Date: Sun, 05 Feb 2006 21:49
84 lines
2663 bytes
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-mailReferences:
<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