mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-05-14 12:38:07 +02:00
50 lines
2.2 KiB
Markdown
50 lines
2.2 KiB
Markdown
# Embedded Systems Reverse Engineering
|
|
[Repository](https://github.com/mytechnotalent/Embedded-Hacking)
|
|
|
|
## Week 1
|
|
Introduction and Overview of Embedded Reverse Engineering: Ethics, Scoping, and Basic Concepts
|
|
|
|
### Non-Credit Practice Exercise 1 Solution: Explore in Ghidra
|
|
|
|
#### Answers
|
|
|
|
##### Question 1: What does the function return?
|
|
`stdio_init_all()` returns `_bool` (displayed as `void` in some Ghidra versions). The function signature shows `_bool stdio_init_all(void)`.
|
|
|
|
##### Question 2: What parameters does it take?
|
|
**None** - the function signature shows `(void)` in parentheses, meaning zero parameters.
|
|
|
|
##### Question 3: What functions does it call?
|
|
`stdio_init_all()` calls initialization functions for:
|
|
- **USB CDC** initialization (USB serial communication)
|
|
- **UART** initialization (serial pin communication)
|
|
|
|
These set up the standard I/O subsystem so that `printf()` can output data.
|
|
|
|
##### Question 4: What's the purpose?
|
|
`stdio_init_all()` initializes **Standard Input/Output** for the Pico 2:
|
|
- **std** = Standard
|
|
- **io** = Input/Output
|
|
|
|
It sets up both USB CDC and UART communication channels, which allows `printf()` to send output through the serial connection.
|
|
|
|
##### Expected Output
|
|
|
|
```
|
|
stdio_init_all() returns: void (_bool)
|
|
It takes 0 parameters
|
|
It calls the following functions: USB CDC init, UART init
|
|
Based on these calls, I believe it initializes: Standard I/O for USB and UART serial communication
|
|
```
|
|
|
|
#### Reflection Answers
|
|
|
|
1. **Why would we need to initialize standard I/O before using `printf()`?**
|
|
Without initialization, there is no communication channel configured. `printf()` needs a destination (USB or UART) to send its output. Without `stdio_init_all()`, output has nowhere to go.
|
|
|
|
2. **Can you find other functions in the Symbol Tree that might be related to I/O?**
|
|
Yes - functions like `stdio_usb_init`, `stdio_uart_init`, `__wrap_puts`, and other I/O-related functions appear in the Symbol Tree.
|
|
|
|
3. **How does this function support the `printf("hello, world\r\n")` call in main?**
|
|
It configures the USB and UART hardware so that when `printf()` (optimized to `__wrap_puts`) executes, the characters are transmitted over the serial connection to the host computer.
|