Puntero this explicado: impleméntalo en C y ensamblador, conoce sus orígenes y domina los detalles

Описание к видео Puntero this explicado: impleméntalo en C y ensamblador, conoce sus orígenes y domina los detalles

¿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/CPCtelera...
*VirtualBox https://www.virtualbox.org/wiki/Downl...
*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/nasmtut...
*System V AMD ABI
**Official Docs https://cs61.seas.harvard.edu/site/pd...
**Summary https://wiki.osdev.org/System_V_ABI
*DT_TEXTREL warning https://stackoverflow.com/questions/7...
*Linux System Call Table https://www.chromium.org/chromium-os/...
*Handling System Calls-The Linux Kernel https://linux-kernel-labs.github.io/r...
*The Definitive Guide to Linux System Calls https://blog.packagecloud.io/the-defi...
*What is PLT https://stackoverflow.com/questions/5...
*What is PLT/GOT? https://reverseengineering.stackexcha...
* PLT and GOT-key to dynamic libraries https://www.technovelty.org/linux/plt...
*Problems with PIE and no-PIE https://stackoverflow.com/questions/6...
*Can't call C library function on 64-bit Linux from assembly https://stackoverflow.com/questions/5...
*GDB Cheat Sheet
**BASIC https://gabriellesc.github.io/teachin...
**Intermediate https://darkdust.net/files/GDB%20Chea...
*Intel x86_64
**Reference Manual https://software.intel.com/en-us/down...
**Instruction Reference-Felix Cloutier https://www.felixcloutier.com/x86/
#CPP #C #ASM #Coding #Programming #gamedev

=== 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/arti...
-Galactic Tomb-Level 1-Pherenos   / galactic-tomb-level-1-pherenos  
-La Guerra de Gamber [Menu Theme] https://mcklain.bandcamp.com/track/la...

Комментарии

Информация по комментариям в разработке