Açıklama:
¿Qué es exactamente el puntero this? ¿Por qué existe y para qué se usa? ¿Cómo entenderlo correctamente? En esta sesión de clase en directo desmenuzaremos el puntero this desde ensamblador hasta C++, pasando por C. Entenderemos qué es, de dónde viene, por qué se usa y cómo funciona. Aprenderemos también a visualizarlo y que deje de ser magia oculta a nuestros ojos en C++. Para entenderlo, implementaremos nuestro propio puntero this en ensamblador y C y después lo veremos en C++ Por el camino aprenderemos a programar un pequeño minijuego en 1D en ensamblador, C y C++ usando Raylib. Utilizaremos este ejemplo para entender y repasar muchas cosas de cómo los ejecutables ELF en Linux, las distintas secciones de un ejecutable, cómo se cargan en memoria y cómo verlas usando objdump y readelf. También veremos cómo utilizar el depurador CGDB para depurar y ver la memoria y entender mejor lo que sucede por dentro. Aprenderemos cómo funcionan las llamadas a código en librerías dinámicas, detalles sobre las PLT (Procedure Lookup Tables) y el mecanismo de seguridad ASLR (Address Space Layout Randomization) y su implicación a la hora de generar ejecutables independientes de la posición o PIE (Position Independent Executable) Muchos detalles interesantes para explorar en una sola sesión de clase muy intensa. Para terminar, dejaremos algunas ideas de ejercicios para practicar y entender mucho mejor todos estos conceptos 0:00:00 Presentación y videojuego 1D (demo) para programar en C, C++ y ensamblador 0:05:12 Ejemplo básico C y C+:+ abrir ventana Raylib. Programar, compilar y linkar 0:17:52 Programar en ensamblador: secciones, funciones externas, parámetros, ELF, ABI, registros x86_64 0:51:25 Ensamblar con YASM y linkar con GCC: relocation, PIE, entender y corregir errores 1:01:05 Gestión del Stack (Pila) en ensamblador: alignment (alineación) a 16 bytes. Depurando con CGDB 1:20:30 ¿Por qué se desalinea la pila? main, _start y call 1:34:04 Ensamblador enlazado con ld: _start, syscall, dynamic linker, librerías dinámicas 1:51:12 Llamadas a librerías dinámicas: PLT, GOT, ASLR, wrt 1:57:17 Programando Enemy Kicker (videojuego 1D) en C++ 2:15:52 Puntero this: implementarloen C, entender punteros, parámetros y operadores 2:53:10 Entiende los métodos const en C++ con la implementación en C 3:04:15 Viendo this en ensamblador traduciendo C++ con godbolt.org 3:13:50 De C a Ensamblador: Enemy Kicker, bucles, structs y punteros === Clase de la asignatura Videojuegos 2.Curso 2023/24.Sesión 8 Grado en Ingeniería Multimedia Universidad de Alicante ===Materiales y Sistema *Máquina Virtual https://archive.org/details/CPCtelera1.5-VM *VirtualBox https://www.virtualbox.org/wiki/Downloads *Raylib https://www.raylib.com/ -Linux Manjaro 6.6.19 x86_64,GCC 13.2.1,Clang 16.0.6 ===Referencias *NASM Tutorial https://cs.lmu.edu/~ray/notes/nasmtutorial/ *System V AMD ABI **Official Docs https://cs61.seas.harvard.edu/site/pdf/x86-64-abi-20210928.pdf **Summary https://wiki.osdev.org/System_V_ABI *DT_TEXTREL warning https://stackoverflow.com/questions/76651605/understanding-a-dt-textrel-warning *Linux System Call Table https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/ *Handling System Calls-The Linux Kernel https://linux-kernel-labs.github.io/refs/heads/master/lectures/syscalls.html#lecture-objectives *The Definitive Guide to Linux System Calls https://blog.packagecloud.io/the-definitive-guide-to-linux-system-calls/ *What is PLT https://stackoverflow.com/questions/5469274/what-does-plt-mean-here *What is PLT/GOT? https://reverseengineering.stackexchange.com/questions/1992/what-is-plt-got * PLT and GOT-key to dynamic libraries https://www.technovelty.org/linux/plt-and-got-the-key-to-code-sharing-and-dynamic-libraries.html *Problems with PIE and no-PIE https://stackoverflow.com/questions/65912204/how-to-compile-nasm-program-calling-printf *Can't call C library function on 64-bit Linux from assembly https://stackoverflow.com/questions/52126328/cant-call-c-standard-library-function-on-64-bit-linux-from-assembly-yasm-code *GDB Cheat Sheet **BASIC https://gabriellesc.github.io/teaching/resources/GDB-cheat-sheet.pdf **Intermediate https://darkdust.net/files/GDB%20Cheat%20Sheet.pdf *Intel x86_64 **Reference Manual https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4 **Instruction Reference-Felix Cloutier https://www.felixcloutier.com/x86/ === Créditos y Licencias -Recortes de imagen con RibbetAI https://ribbet.ai/ -Imagen de Fondo Assembler, C y C++ generada con Dall-E 3 https://openai.com/dall-e-3 -Music by McKlain https://open.spotify.com/intl-es/artist/3oSxrSt7qOJw3GT4tobt4L -Galactic Tomb-Level 1-Pherenos https://soundcloud.com/mcklain/galactic-tomb-level-1-pherenos -La Guerra de Gamber [Menu Theme] https://mcklain.bandcamp.com/track/la-guerra-de-gamber-menu-theme
İndirme seçeneklerini hazırlama
http://unidownloader.com/ web sitesi, program ve uzantı yüklemeden yapmak istiyorsanız, bir videoyu veya ayrı bir ses parçasını indirmenin en iyi yoludur.
UDL Helper uzantısı, hızlı içerik indirme için YouTube, Instagram ve OK.ru sitelerine sorunsuz bir şekilde entegre edilen kullanışlı bir düğmedir.
UDL Client programı (Windows için), 900'den fazla web sitesini, sosyal ağları ve video barındırma sitelerini ve ayrıca kaynakta bulunan herhangi bir video kalitesini destekleyen en güçlü çözümdür.
UDL Lite, mobil cihazınızdan bir web sitesine erişmenin gerçekten kullanışlı bir yoludur. Yardımı ile videoları doğrudan akıllı telefonunuza kolayca indirebilirsiniz.
En iyi kalite formatları FullHD (1080p), 2K (1440p), 4K (2160p) ve 8K'dır (4320p). Ekranınızın çözünürlüğü ne kadar yüksekse video kalitesi de o kadar yüksek olmalıdır. Bununla birlikte, göz önünde bulundurulması gereken başka faktörler de vardır: indirme hızı, boş alan miktarı ve oynatma sırasında cihaz performansı.
Tarayıcı/bilgisayar tamamen donmamalıdır! Böyle bir durumda lütfen videonun bağlantısını ekleyerek bildirin. Bazen videolar doğrudan uygun bir formatta indirilemez, bu nedenle dosyayı istenen formata dönüştürme özelliğini ekledik. Bazı durumlarda, bu işlem bilgisayar kaynaklarını aktif olarak kullanabilir.
Web sitesini veya PWA uygulaması UDL Lite'ı kullanarak bir videoyu akıllı telefonunuza indirebilirsiniz. UDL Helper uzantısını kullanarak QR kodu aracılığıyla bir indirme bağlantısı göndermek de mümkündür.
En uygun yol, videoyu MP3 formatına dönüştürmeyi destekleyen UDL Client programını kullanmaktır. Bazı durumlarda MP3, UDL Helper uzantısı aracılığıyla da indirilebilir.
Bu özellik UDL Helper uzantısında mevcuttur. Ayarlarda "Video anlık görüntüsü düğmesini göster" seçeneğinin işaretli olduğundan emin olun. Oynatıcının sağ alt köşesinde "Ayarlar" simgesinin solunda bir kamera simgesi görünmelidir. Üzerine tıkladığınızda, videodaki mevcut kare JPEG formatında bilgisayarınıza kaydedilecektir.
Hiçbir maliyeti yok. Hizmetlerimiz tüm kullanıcılar için tamamen ücretsizdir. PRO abonelikleri yoktur, indirilen videoların sayısı veya maksimum uzunluğu konusunda herhangi bir kısıtlama yoktur.