szukam kogos, kto napisze program w c

44 views
Skip to first unread message

bdronka

unread,
Jan 17, 2006, 4:51:51 PM1/17/06
to
Witam!
szukam gokos, kto napisze program (prosty) w c (oczywiscie za kase)

prosze o kontakt e-mailowy
bdr...@poczta.gazeta.pl


lr...@lrem.maxnet

unread,
Jan 17, 2006, 5:11:11 PM1/17/06
to
W poście <dqjoto$s0g$1...@inews.gazeta.pl>,
bdronka nabazgrał:

> szukam gokos, kto napisze program (prosty) w c (oczywiscie za kase)
>
> prosze o kontakt e-mailowy

#v+
#include <stdio.h>

int main()
{
printf("Hello world!\n");
return 0;
}
#v-

Ile zarobiłem?

BP, NMSP

--
Zabytek (z ruskiego "ZABYT"-zapomnieć) obiekt nie wart pamiętania.

Wercyngetoryx

unread,
Jan 17, 2006, 5:18:44 PM1/17/06
to
lr...@lrem.maxnet wrote:
> W poście <dqjoto$s0g$1...@inews.gazeta.pl>,
> bdronka nabazgrał:
>
>>szukam gokos, kto napisze program (prosty) w c (oczywiscie za kase)
>>
>>prosze o kontakt e-mailowy
>
>
> #v+
> #include <stdio.h>
>
> int main()
> {
> printf("Hello world!\n");
> return 0;
> }
> #v-
>
> Ile zarobiłem?
>
> BP, NMSP
>
ja bym obstawial raczej:

int main(){
return(0);};

jak ma byc prosty to prosty.

Stachu 'Dozzie' K.

unread,
Jan 17, 2006, 5:39:55 PM1/17/06
to

To jeszcze to sformatuj jakoś.

> jak ma byc prosty to prosty.

Jak ma być prosty i pod Linux-x86, to lepsze chyba będzie to:
#v+
int main = 12828721;
#v-
No i ostrzeżenie kompilatora jest rozbrajające :)

--
Feel free to correct my English
Stanislaw Klekot

Kajetan Staszkiewicz

unread,
Jan 17, 2006, 6:05:48 PM1/17/06
to
Dnia wtorek, 17 stycznia 2006 23:39, Stachu 'Dozzie' K. napisał(a):

> int main = 12828721;

skąd akurat taka wartość?

--
| pozdrawiam / greetings | powered by Trustix, Gentoo and FreeBSD |
| Kajetan Staszkiewicz | JID: veg...@chrome.pl |
| Vegeta | IMQ devnames: http://tuxpowered.net |
`------------------------^----------------------------------------'

Lukasz Glebicki

unread,
Jan 17, 2006, 6:12:46 PM1/17/06
to
Stachu 'Dozzie' K. wrote:

> Jak ma być prosty i pod Linux-x86, to lepsze chyba będzie to:
> #v+
> int main = 12828721;
> #v-
> No i ostrzeżenie kompilatora jest rozbrajające :)

[...]

Nic ciekawego nie ma. Możesz wkleić z jakimi parametrami kompilowałeś oraz
ten rozbrajający komunikat?
Oraz gcc -v

pozdrawiam
--
Łukasz Głębicki mail/rot13:yhxn...@cbfg.cy PLD/Linux Team
gg:246267 Linux Registered User #318551 blekot:{irc,skype}

Student of Warsaw University of Technology, Faculty of Mechatronics

"M(dot)Ked...@elka.pw.edu.pl

unread,
Jan 17, 2006, 6:19:42 PM1/17/06
to
> Nic ciekawego nie ma.

mkedzier@helios ~/user_data $ gcc -Wall ./a.c

--
Mariusz Kędzierawski
+---------------------------------------------------------------------+
Sens życia to jedyny narkotyk, od którego wszyscy chcą się uzależnić.
+---------------------------------------------------------------------+

Stachu 'Dozzie' K.

unread,
Jan 17, 2006, 6:16:56 PM1/17/06
to
On 17.01.2006, Kajetan Staszkiewicz <vegeta...@tuxpowered.net> wrote:
> Dnia wtorek, 17 stycznia 2006 23:39, Stachu 'Dozzie' K. napisał(a):
>
>> int main = 12828721;
>
> skąd akurat taka wartość?

Z assemblera. Żeby ładnie się zero znalazło w EAX, a potem żeby ładnie
się RET wykonało.

#v+
[dozzie@hans dozzie]$ perl -e 'print pack "I", 12828721' > asmcode.bin
[dozzie@hans dozzie]$ ndisasm -b 32 asmcode.bin
00000000 31C0 xor eax,eax
00000002 C3 ret
00000003 00 db 0x00
[dozzie@hans dozzie]$
#v-

main zwykle jest funkcją, zatem pod symbolem "main" znajduje się
początek kodu, który należy wykonać. Dla linkera to tylko etykieta dla
jakiegoś adresu (dla jakiejś liczby). Podobnie jest z "int main;": dla
linkera to dalej jest etykieta dla jakiegoś adresu w pamięci, tyle że
tym razem pod tym adresem znajdują się dane innego typu (tutaj: int).
Jeśli wpisałbym tam cokolwiek, to to cokolwiek zaczęłoby się wykonywać
jako kod maszynowy, więc wpakowałem tam nawet całkiem sensowny kod.

Piotr Sietnik

unread,
Jan 18, 2006, 3:07:55 AM1/18/06
to
> #v+
> [dozzie@hans dozzie]$ perl -e 'print pack "I", 12828721' > asmcode.bin
> [dozzie@hans dozzie]$ ndisasm -b 32 asmcode.bin
> 00000000 31C0 xor eax,eax
> 00000002 C3 ret
> 00000003 00 db 0x00
> [dozzie@hans dozzie]$
> #v-

To samo można napisać tak:

#v+
int main [] = {0xc0c3, 0x0031};
#v-

--
Piotr Sietnik
p...@pk.mofnet.gov.pl

Jedrzej Dudkiewicz

unread,
Jan 18, 2006, 3:35:50 AM1/18/06
to
> Jak ma być prosty i pod Linux-x86, to lepsze chyba będzie to:
> #v+
> int main = 12828721;
> #v-
> No i ostrzeżenie kompilatora jest rozbrajające :)

Mnie bardziej rozbraja to:

[jd@documentation handler]$ cat main.cc
int main = 12828721;
[jd@documentation handler]$ g++ -pedantic -Wall main.cc
[jd@documentation handler]$ g++ -v
Reading specs from
/mnt/hda5/usr/bin/../lib/gcc/i386-redhat-linux/4.0.0/specs
[...]
gcc version 4.0.0 20041019 (Red Hat 4.0.0-0.8)

Nawet nie mrugnął lampką.

JD

Zbyszek Malec

unread,
Jan 18, 2006, 5:22:14 AM1/18/06
to
Jedrzej Dudkiewicz wrote (tak! stara dobra wrotka!):

> Nawet nie mrugnął lampką.

U mnie jest tak samo :(

--
Zbigniew Malec Ustronie:104 gg:2756100

Stachu 'Dozzie' K.

unread,
Jan 18, 2006, 7:53:37 AM1/18/06
to
On 18.01.2006, Piotr Sietnik <p...@pk.mofnet.gov.pl> wrote:
>> #v+
>> [dozzie@hans dozzie]$ perl -e 'print pack "I", 12828721' > asmcode.bin
>> [dozzie@hans dozzie]$ ndisasm -b 32 asmcode.bin
>> 00000000 31C0 xor eax,eax
>> 00000002 C3 ret
>> 00000003 00 db 0x00
>> [dozzie@hans dozzie]$
>> #v-
>
> To samo można napisać tak:
>
> #v+
> int main [] = {0xc0c3, 0x0031};
> #v-

Nie, nie można tak zapisać. Jeden int to cztery bajty, więc w pierwszym
elemencie tablicy dostaniesz dwa 0x00 po XOR EAX, EAX. Program zginie
śmiercią SIGILL. Co innego short main[] (albo char main[]).

Stachu 'Dozzie' K.

unread,
Jan 18, 2006, 7:55:46 AM1/18/06
to
On 18.01.2006, Zbyszek Malec <zbys...@tlen.pl> wrote:
> Jedrzej Dudkiewicz wrote (tak! stara dobra wrotka!):
>
>> Nawet nie mrugnął lampką.
>
> U mnie jest tak samo :(

O. U mnie to wygląda tak:
#v+
[dozzie@hans lol]$ gcc -Wall -o /dev/null small.c
small.c:1: warning: `main' is usually a function
[dozzie@hans lol]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-slackware-linux/3.3.6/specs [...]
Thread model: posix
gcc version 3.3.6
[dozzie@hans lol]$
#v-

Stachu 'Dozzie' K.

unread,
Jan 18, 2006, 8:04:48 AM1/18/06
to
On 18.01.2006, Stachu 'Dozzie' K. <doz...@dynamit.im.pwr.wroc.pl.nospam> wrote:
> On 18.01.2006, Zbyszek Malec <zbys...@tlen.pl> wrote:
>> Jedrzej Dudkiewicz wrote (tak! stara dobra wrotka!):
>>
>>> Nawet nie mrugnął lampką.
>>
>> U mnie jest tak samo :(
>
> O. U mnie to wygląda tak:
> #v+
> [dozzie@hans lol]$ gcc -Wall -o /dev/null small.c
> small.c:1: warning: `main' is usually a function
> [dozzie@hans lol]$ gcc -v
> Reading specs from /usr/lib/gcc-lib/i486-slackware-linux/3.3.6/specs [...]
> Thread model: posix
> gcc version 3.3.6
> [dozzie@hans lol]$
> #v-

Żeby było śmieszniej:
#v+
[dozzie@dynamit dozzie]$ gcc -Wall small.c -o /dev/null


small.c:1: warning: 'main' is usually a function

[dozzie@dynamit dozzie]$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: [...]
Thread model: posix
gcc version 4.0.3 20051201 (prerelease) (Debian 4.0.2-5)
[dozzie@dynamit dozzie]$

Jedrzej Dudkiewicz

unread,
Jan 18, 2006, 8:16:10 AM1/18/06
to
> >>> Nawet nie mrugnął lampką.
> >>
> >> U mnie jest tak samo :(
> >
> > O. U mnie to wygląda tak:

No tak, ale chodziło o to, że g++ mimo -pedantic i -Wall nic nie powiedział.
Plik nazywał się main.cc.

Dodam też, że u mnie ten program, kompilowany tak jak podałeś, ginie z
komunikatem "Segmentation fault".

JD

Stachu 'Dozzie' K.

unread,
Jan 18, 2006, 8:36:10 AM1/18/06
to
On 18.01.2006, Jedrzej Dudkiewicz <jedrzej.d...@poczta.interia.pl> wrote:
>> >>> Nawet nie mrugnął lampką.
>> >>
>> >> U mnie jest tak samo :(
>> >
>> > O. U mnie to wygląda tak:
>
> No tak, ale chodziło o to, że g++ mimo -pedantic i -Wall nic nie powiedział.
> Plik nazywał się main.cc.

No fakt, g++ u mnie też nic nie powiedział. Inna sprawa, że to było C,
nie C++.

> Dodam też, że u mnie ten program, kompilowany tak jak podałeś, ginie z
> komunikatem "Segmentation fault".

A u mnie nie, u mnie wszystko w porządku. I to niezależnie od tego, czy
był kompilowany jako C, czy jako C++. Sprawdzane na Athlonie XP,
Pentium II i Pentium IV.

Jedrzej Dudkiewicz

unread,
Jan 18, 2006, 9:20:26 AM1/18/06
to
> > No tak, ale chodziło o to, że g++ mimo -pedantic i -Wall nic nie
powiedział.
> > Plik nazywał się main.cc.
>
> No fakt, g++ u mnie też nic nie powiedział. Inna sprawa, że to było C,
> nie C++.

Wydaje mi się, że to nie jest ani poprawne C ani C++, po prostu trick, tak
jak dziedziczenie po std::vector<> - niektórzy to robią i im to działa, inni
próbują i giną marnie.

> > Dodam też, że u mnie ten program, kompilowany tak jak podałeś, ginie z
> > komunikatem "Segmentation fault".
>
> A u mnie nie, u mnie wszystko w porządku. I to niezależnie od tego, czy
> był kompilowany jako C, czy jako C++. Sprawdzane na Athlonie XP,
> Pentium II i Pentium IV.

Pokombinuję jeszcze, może coś się okaże. Ja mam Fedore, Ty Slacka, może to
to?

JD

Tomasz Michał Łukaszewski

unread,
Jan 18, 2006, 9:24:49 AM1/18/06
to
Jedrzej Dudkiewicz <jedrzej.d...@poczta.interia.pl> wrote:

> Dodam też, że u mnie ten program, kompilowany tak jak podałeś, ginie z
> komunikatem "Segmentation fault".

Bo taki kod funkcji main() trafi do segmentu danych. Pewnie kernel
u Ciebie nie pozwala na wykonanie kodu z segmentu danych (jako
zabezpieczenie przeciw exploitom typu buffer overflow, oczywiście).


Tomasz Łukaszewski

Jedrzej Dudkiewicz

unread,
Jan 18, 2006, 10:03:50 AM1/18/06
to
> > Dodam też, że u mnie ten program, kompilowany tak jak podałeś, ginie z
> > komunikatem "Segmentation fault".
>
> Bo taki kod funkcji main() trafi do segmentu danych. Pewnie kernel
> u Ciebie nie pozwala na wykonanie kodu z segmentu danych (jako
> zabezpieczenie przeciw exploitom typu buffer overflow, oczywiście).

O, dzięki za info. Tak kombinowałem, ale wiedzy mi zabrakło :)

JD

Marcin Szczepaniak

unread,
Jan 18, 2006, 11:54:31 AM1/18/06
to
At Tue, 17 Jan 2006 22:39:55 +0000 (UTC) Stachu 'Dozzie' K. wrote:

> Jak ma być prosty i pod Linux-x86, to lepsze chyba będzie to:
> #v+
> int main = 12828721;
> #v-
> No i ostrzeżenie kompilatora jest rozbrajające :)

mi nic nie napisal

szczepan@trypel:~$ gcc 1.c
szczepan@trypel:~$

Jarosław Siebert

unread,
Jan 18, 2006, 1:02:18 PM1/18/06
to
On Wed, Jan 18, 2006 at 03:20:26PM +0100, Jedrzej Dudkiewicz wrote:
> Pokombinuję jeszcze, może coś się okaże. Ja mam Fedore, Ty Slacka, może to
> to?
jeśli masz w slacku libsafe - to może być to.

pozdrawiam
iu1j4

--
.: DLJ PROJECT :.
.: Jarosław Siebert :.
........: jsie...@poczta.wp.pl :.........
.: Lru: 255615 | tel: 603877428 | Gg: 560046:.

Jarosław Siebert

unread,
Jan 18, 2006, 1:03:23 PM1/18/06
to
właśnie od tego jest libsafe - w slacku dostęny na dodatkowej płytce z
contrib

Mateusz Marzantowicz

unread,
Jan 18, 2006, 5:39:55 PM1/18/06
to
On Wed, 18 Jan 2006 15:20:26 +0100, Jedrzej Dudkiewicz wrote:


>> A u mnie nie, u mnie wszystko w porządku. I to niezależnie od tego, czy
>> był kompilowany jako C, czy jako C++. Sprawdzane na Athlonie XP,
>> Pentium II i Pentium IV.
>
> Pokombinuję jeszcze, może coś się okaże. Ja mam Fedore, Ty Slacka, może to
> to?

Z tego co widać to on ma Debiana

#v+


[dozzie@dynamit dozzie]$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: [...]
Thread model: posix
gcc version 4.0.3 20051201 (prerelease) (Debian 4.0.2-5)
[dozzie@dynamit dozzie]$
#v-

Slackware mam ja... :-) Podczas kompilacji dostaję tylko jedna liniję
tekstu:

#v+
gcc -Wall -pedantic program.c
program.c:1: warning: 'main' is usually a function
#v-

Samo uruchomienie programu przebiega bez problemów.

Pozdrawiam

"M(dot)Ked...@elka.pw.edu.pl

unread,
Jan 19, 2006, 2:53:50 AM1/19/06
to
> Wydaje mi się, że to nie jest ani poprawne C ani C++, po prostu trick, tak
> jak dziedziczenie po std::vector<> - niektórzy to robią i im to działa, inni
> próbują i giną marnie.

Jakiś minimalny przykład kodu chętnie bym zobaczył, co to u jednych
działa a u innych nie.

Jedrzej Dudkiewicz

unread,
Jan 19, 2006, 3:44:33 AM1/19/06
to
> > Pokombinuję jeszcze, może coś się okaże. Ja mam Fedore, Ty Slacka, może
to
> > to?
> jeśli masz w slacku libsafe - to może być to.

Nie mam, Slacka miał Dozzie.

JD

Jedrzej Dudkiewicz

unread,
Jan 19, 2006, 3:44:58 AM1/19/06
to
> > Pokombinuję jeszcze, może coś się okaże. Ja mam Fedore, Ty Slacka, może
to
> > to?
>
> Z tego co widać to on ma Debiana

Sugerowałem się tym:
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/specs

JD

Jedrzej Dudkiewicz

unread,
Jan 19, 2006, 3:45:59 AM1/19/06
to
> > Wydaje mi się, że to nie jest ani poprawne C ani C++, po prostu trick,
tak
> > jak dziedziczenie po std::vector<> - niektórzy to robią i im to działa,
inni
> > próbują i giną marnie.
>
> Jakiś minimalny przykład kodu chętnie bym zobaczył, co to u jednych
> działa a u innych nie.

Jeżeli dziedziczysz dodając same metody a nie pola, to zwykle działa. Jak
dodajesz pola, to zwykle nie działa, bo destruktor nie jest wirtualny.

JD

Jedrzej Dudkiewicz

unread,
Jan 19, 2006, 3:46:36 AM1/19/06
to
> mi nic nie napisal
>
> szczepan@trypel:~$ gcc 1.c

Bo nie przeczytałeś innych postów, w których jest wyraźnie napisane, że
należy dodać -Wall.

JD

Piotr Sietnik

unread,
Jan 19, 2006, 7:54:08 AM1/19/06
to
> Nie, nie można tak zapisać. Jeden int to cztery bajty, więc w pierwszym
> elemencie tablicy dostaniesz dwa 0x00 po XOR EAX, EAX. Program zginie
> śmiercią SIGILL.

No tak coś mi się kolejność bajtów powaliła, Tobie zresztą też, bo
to co dostaję, to:

#v+
ret
rolb $0x0,(%eax)
xor %eax,(%eax)
add %al,(%eax)
#v-

No, ale można tak:

#v+
int main [] = {0x00c3c031};
#v-

> Co innego short main[] (albo char main[]).

W żadnym razie tak, bo main musi być int.

--
Piotr Sietnik
p...@pk.mofnet.gov.pl

Piotr Sietnik

unread,
Jan 19, 2006, 8:10:35 AM1/19/06
to
U mnie jest tak:

#v+
$ cc -Wall -pedantic -std=c99 cc.c
cc.c:1: warning: 'main' is usually a function
$ cc -v
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.4 [FreeBSD] 20050518
#v-

> Samo uruchomienie programu przebiega bez problemów.

Tak samo.

--
Piotr Sietnik
p...@pk.mofnet.gov.pl

Stachu 'Dozzie' K.

unread,
Jan 19, 2006, 8:17:35 AM1/19/06
to
On 19.01.2006, Piotr Sietnik <p...@pk.mofnet.gov.pl> wrote:
>> Nie, nie można tak zapisać. Jeden int to cztery bajty, więc w pierwszym
>> elemencie tablicy dostaniesz dwa 0x00 po XOR EAX, EAX. Program zginie
>> śmiercią SIGILL.
>
> No tak coś mi się kolejność bajtów powaliła, Tobie zresztą też,

Racja. Założyłem, że podałeś poprawny kod ({0xc031, 0xc3}), tylko
z niepoprawnymi rozmiarami, zamiast samemu sprawdzić.

Stachu 'Dozzie' K.

unread,
Jan 19, 2006, 8:29:07 AM1/19/06
to

I obaj mieliście rację: mam i Debiana, i Slackware (na różnych
maszynach; na obu dystrybucję wybierałem sam).

Reply all
Reply to author
Forward
0 new messages