From 1f73ab0e49ce806766159e99c163273771b5a1e1 Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Wed, 27 Sep 2023 13:55:18 +0200 Subject: [PATCH] a1-4 --- a1-4/a.out | Bin 0 -> 8368 bytes a1-4/main.c | 7 +++++++ a1-4/main.o | Bin 0 -> 1608 bytes a1-4/out | 14 ++++++++++++++ a1-4/quadrat.c | 3 +++ a1-4/quadrat.h | 1 + a1-4/quadrat.o | Bin 0 -> 1240 bytes a1-4/results.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 73 insertions(+) create mode 100755 a1-4/a.out create mode 100644 a1-4/main.c create mode 100644 a1-4/main.o create mode 100644 a1-4/out create mode 100644 a1-4/quadrat.c create mode 100644 a1-4/quadrat.h create mode 100644 a1-4/quadrat.o create mode 100644 a1-4/results.md diff --git a/a1-4/a.out b/a1-4/a.out new file mode 100755 index 0000000000000000000000000000000000000000..8054dd06bf08250b538040a749d530e44222f202 GIT binary patch literal 8368 zcmeHMeQaA-6~B&~#{G!nreA5hQE#+U3W}S4r;M(45~nXE{h&)nr!{?bVkdF&N3fqq zQWzAan`)JeA|Y+#Lr5z^d`VCtME*f*2`c3;S_!mC1F1vp$SNj+*h(2~%sKC!pYz^} z!zSR*Ug`PV^SkGqd+ztS*I$fwbyRsg3dyS;Q_O{{EhH=jL#rf1B&=H00{VSWJ)q_j zKhMOh@~}my)Jk{6G^kH-FHzQOsj>h!eL&F!xqifmcW%Mz|orH_655!S^=*$ofu!8)FIdHc9a0Piq{nW?ZvRw`3k{P34>3ZLAOz%%-VyWcG1hFik z=Z#p-(9^MGM(ye9Y;Dswhc<_{DZR6MpB_)-5(CM+k;rxLYfEJ_iSAf$iZut)*^FrF zmS{ymcB@KyA7kL5-sS$qJSePAE?}uG(gv&x%;&I7u8T7Nft!nibbNuJsRRcbvbsNs}0BO>OV{UWVlnuA9|2sC^KL4)@&dUgGW;@#GUwqox>bDmLmG^GiPHLC65oH$l2&Td+nvR0$F$;~w9y+= z2fMq*s=rRn)W&MJm}J+RBv@MhH0iukx0V*IHn!^}Vh(F#)n6s5?YyHEZyKw}rM=9O zOSL_v>;0j+wWrN0dM4P58J_f?WWlj*hfFgYrb%DBH0{-jQ`)7;-J0jJc5T{dAcIT9 z;9@p7m%UTF7Lb@KY}7_~{doc94zoXtwX?f!5jR;&EuPfq=W_KM#CzDCQ|#E^C&(nV zhsAr|>L&@#y~15Rxte~8m&w!flo_W_P5x}UR5Eit6D(JJ=I+_(-MSw~@Agd0w2fOD z`BZ1|)yNZ_#oLj?k>b4w_2~LQjoD#MOds#saFfSyatm41F5UAQYc{=Jw^nr(-|H&g zZZG~dQd;&0ZFIt;?fhfm7LV;yJ&~i4p2)F?PQEK1X>$(9sC#I3tdG;&T;qL|nxlBW z_{cO5aHBZgLi9NCt<=h^L{AW%B6@~sfQEUJ=nc)tbNgx%ryEWwd6GKYYU967e@j{Ee;tV5`4@SxG~ zbP-#-pYHd-{T{gA1NVF2zw80TV~D@7w}LJfyHoS5j9g#TI}#+}I)^xKjmYB+;WL~Q z;ypeuIHCOA=~9;Y7bUntOm?W6uQAv(Uy_TCZ4=*TyD^!JqTH>CWZ z!lNBx{{KdB|8yIC1OwqNcpo0|`kuD7j|CeK_ZBinA-E&7E!5n!rC@TKzObn!)Vy_r zg}#qDv)D@!KkoH*c`wCWxDPvVuQD*uwgNBRC^64$Fx?-k%k#^L&sUg-PP|58e4MyX zVO*W~0)_eG#1|^eGbg@CVZAx=#VSx?T)e7QHCM#_<@Xn-ox1Y+b>bAkVZz%AylP4L z{lErOztyXQ73G(f-$k7A%gXzJ6JJj6B0)Q3=Dlh~dEMFzy}U~0p6J9IRG=b`U1~;} z*V{bxx6%w^<#@lVQhqh$>QBGmKXKs?36A~KvZB-u%6Mp(fj?N^9VR}zAJSr{ydR69 z5mSD4f4)d~CI7!Y2R>JOzi-;FR|YmL;*l!Z|G8PXbk;atA>5;8kK;9w$N2!;H_XiJ zdG!y|&g^mj1vQ|Gc6;}_s3p9f#%oFr3iR`XlnJ6T8-2#aXV0IVga>F|VZ5NSlJNSf z+3O|DID~Ap+r<4UC;pgsA}T*Rhy3RV=X%}q`3&Jfn_XmIAbd&H%JMr2@b56rwo^qtM?U>QgiCSGtkb`}hSbPp?<;tUi#+_Qq0r+{otgdaN+4 z`m*VvRKiHaLp!$bY^f~7Z)Zt8mdnLP^hCzUji~-yES=Efg>-s^RBW71l7>T+U)ac{ z&lF&q8R-~aQgULqbdV)9rR4%;6C#c7zEc`|g0QO}YE z>s^p!osWciJfGDEW0^QVAa))gsdzG@7xD>e>Wr7%ZN&HH^J2z)nACN8e?&*|!(_$R zM(6vc(=`>!kED%QFHs|B(Lv!+i>U#HXMaMG*D7+t2M|{Z^4f91DtmV*M5L zx%HnXjQd26jqM7=QQwgzczUs9XOPmp<+R zppCBfqu*fmH +#include "quadrat.h" + +int main(void) { + printf("%d",quadrat(2)); + return 0; +} diff --git a/a1-4/main.o b/a1-4/main.o new file mode 100644 index 0000000000000000000000000000000000000000..fa05247cf4338347bc878c22be202d3d565989c0 GIT binary patch literal 1608 zcmbtT&ubGw6n>l4HfkdA$3dtOpT} z4}urLqko1s4}xd^3Bjv(p}uc-rX9DNi+*9|z4y)g-psz4yl(Z{Im;pqiyqQpq*rjyj)bH;7_>yDdC&;~T-FFY*e8v=0vG?@rl@U>=*}Pv~?hj^uG%Mc~cSL37 z)+~;yuc|dsxqU5Rp*@d@VZB@@Yqw-A6&CaF`Cu2B!vK~s)lZk+*jy5=2_#M@wYQq}tonXt4Hr1Xdl|@HR@%X);;GE*| zG|&~zUs62s3kF|SJn}IPAi@`uNDfGZQIOcN_5$yj6p^HHk{E;`iC~%p!|7z= z`Ml;&BTsZ5^;g134!1c0GH>i|26EyZ?DL;ane}*M>6>$y1N40*QIe~D*d-q5iNnK$ zqngoGB>Ihg@E(8*iJ_}(!KYvBSgofGa!uUi05$(rUu7+7{&ja8>;2Pp)BE33`U+bU z+bXzjlI&}}wheIy+hS_f{3u_k{a{R_isN uwKr;i$Hb_q1LHq-f=5~pF5P3MD6jTkMPMNP{bzVBOaDpfrJ;qJ*8c(CAaQvB literal 0 HcmV?d00001 diff --git a/a1-4/out b/a1-4/out new file mode 100644 index 0000000..874bf96 --- /dev/null +++ b/a1-4/out @@ -0,0 +1,14 @@ +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-std=c99' '-Wall' '-pedantic-errors' '-v' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/ccOXKwWD.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. main.o quadrat.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-std=c99' '-Wall' '-pedantic-errors' '-v' '-mtune=generic' '-march=x86-64' diff --git a/a1-4/quadrat.c b/a1-4/quadrat.c new file mode 100644 index 0000000..b4bf274 --- /dev/null +++ b/a1-4/quadrat.c @@ -0,0 +1,3 @@ +int quadrat(int x) { + return x * x; +} diff --git a/a1-4/quadrat.h b/a1-4/quadrat.h new file mode 100644 index 0000000..2f141fb --- /dev/null +++ b/a1-4/quadrat.h @@ -0,0 +1 @@ +extern int quadrat(int x); diff --git a/a1-4/quadrat.o b/a1-4/quadrat.o new file mode 100644 index 0000000000000000000000000000000000000000..4dda1c1213fdb5a96303ecf20d7a902db930da2e GIT binary patch literal 1240 zcmbtTOG^VW5T0$dzO_CMLOs-z4{T`BV(}oAQY$JVVvi!*cBP+lsR7GOH?h0|S_h9MY) z{8sy|ec8FocE%pFoue1XWio5g`Fx>K<&EenOR{)uxzUXhSBVshuPg{wZZ{>p)j9yH z8MY$Bef{^?zzp&<$ig&jjD~LmnUT;ACQ$r~QSUwQ{^7SA^gS6s5VXT-!XU2rSrB^t zXv_}%!uR~(hme`j`stpLvd$ZJscv&tR7gmp!gV|S)-7`{D%>srb9r6(vO?Txa$qH! z+rSF03#?eHRGcbu)f#tLZZ98mxm`R3R(H;9=9G_5>UPDEmHy`z!A| z=9`;Eo;dRc_GP~5O#K`t&^!67ehIa-XB>xas{W!*B3AX4PimZ=+R_6JE1jaY5fJz7 zt}(vBL6#EEo6UbBi!1c%(q4uD53OTQu97quW literal 0 HcmV?d00001 diff --git a/a1-4/results.md b/a1-4/results.md new file mode 100644 index 0000000..a8dc718 --- /dev/null +++ b/a1-4/results.md @@ -0,0 +1,48 @@ +# A1-4 Ergebnisse + +Die `main.o` Datei enthält lediglich den Objektcode der `main` Funktion + +Die `quadrat` Funktion ist nicht in der `main.o` Datei enthalten. Stattdessen gibt es eine Referenz auf die fehlende `quadrat` Funktion, die sich mit `nm` anzeigen lässt. Gleiches gilt für `printf` + +``` +$ nm main.o + U _GLOBAL_OFFSET_TABLE_ +0000000000000000 T main + U printf + U quadrat + +``` + +In dem Ordner `/usr/include` lässt sich die `stdio.h` Datei finden. Sie enthält den Funktionskopf der `printf` Funktion: + +``` +extern int printf (const char *__restrict __format, ...); +``` + +--- +Anmerkung: + +Hier lässt sich auch erkennen, warum `printf(quadrat(x))` nicht die erwartete Ausgabe liefert. Die `printf` Funktion erwartet als erstes Argument stehts einen "string" (bzw `char*`). Ein Integer würde zu unerwartetem Verhalten führen. + +--- + +Der Präprozessor hat also die `stdio.h` Datei automatisch gefunden und eingebunden. + +Die Position der `stdio.o` Datei ist von Gerät zu Gerät unterschiedlich. Für gewöhnlich liegt sie in einem Archiv namens `libc.a` in einem Unterordner von `/usr/lib` + +``` +# Dateien im Archiv auflisten, in der Liste nach stdio.o suchen + +$ ar t /usr/lib/x86_64-linux-gnu/libc.a | grep -C1 ^stdio.o +... +stdfiles.o +stdio.o +strops.o +... +``` + +Wie sich erkennen lässt, ist die `stdio.o` Datei in dem Archiv vorhanden. + +--- + +Der Linker hat nun sowohl die `quadrat.o` Datei, als auch die `stdio.o` Datei gefunden und eingebunden, um das die ausführbare Binärdatei zu erzeugen. \ No newline at end of file