For this project well be taking a deeper dive into the following concepts
-
Pointers
-
Arrays
-
Strings
Write a function that fills memory with a constant byte.
- Prototype:
char *_memset(char *s, char b, unsigned int n);
- The
_memset()
function fills the firstn
bytes of the memory area pointed to bys
with the constant byteb
- Returns a pointer to the memory area
s
FYI: The standard library provides a similar function: memset
. Run man memset
to learn more.
Write a function that copies memory area.
- Prototype:
char *_memcpy(char *dest, char *src, unsigned int n);
- The
_memcpy()
function copiesn
bytes from memory areasrc
to memory areadest
- Returns a pointer to
dest
FYI: The standard library provides a similar function: memcpy
. Run man memcpy
to learn more.
Write a function that locates a character in a string.
- Prototype:
char *_strchr(char *s, char c);
- Returns a pointer to the first occurrence of the character
c
in the strings
, orNULL
if the character is not found
FYI: The standard library provides a similar function: strchr
. Run man strchr
to learn more.
Write a function that gets the length of a prefix substring.
- Prototype:
unsigned int _strspn(char *s, char *accept);
- Returns the number of bytes in the initial segment of
s
which consist only of bytes fromaccept
FYI: The standard library provides a similar function: strspn
. Run man strspn
to learn more.
Write a function that searches a string for any of a set of bytes.
- Prototype:
char *_strpbrk(char *s, char *accept);
- The
_strpbrk()
function locates the first occurrence in the strings
of any of the bytes in the stringaccept
- Returns a pointer to the byte in
s
that matches one of the bytes inaccept
, orNULL
if no such byte is found
FYI: The standard library provides a similar function: strpbrk
. Run man strpbrk
to learn more.
Write a function that locates a substring.
- Prototype:
char *_strstr(char *haystack, char *needle);
- The
_strstr()
function finds the first occurrence of the substringneedle
in the stringhaystack
. The terminating null bytes (\0
) are not compared - Returns a pointer to the beginning of the located substring, or
NULL
if the substring is not found.
FYI: The standard library provides a similar function: strstr
. Run man strstr
to learn more.
Write a function that prints the chessboard.
- Prototype:
void print_chessboard(char (*a)[8]);
Write a function that prints the sum of the two diagonals of a square matrix of integers.
- Prototype:
void print_diagsums(int *a, int size);
- Format: see example
- You are allowed to use the standard library
Note that in the following example we are casting an int[][]
into an int*
. This is not something you should do. The goal here is to make sure you understand how an array of array is stored in memory.
Write a function that sets the value of a pointer to a char.
- Prototype:
void set_string(char **s, char *to);
Create a file that contains the password for the crackme2 executable.
- Your file should contain the exact password, no new line, no extra space
ltrace
,ldd
,gdb
andobjdump
can help- You may need to install the
openssl
library to run thecrakme2
program:sudo apt install libssl-dev
- Edit the source list
sudo nano /etc/apt/sources.list
to add the following line:deb http://security.ubuntu.com/ubuntu xenial-security main
Thensudo apt update
andsudo apt install libssl1.0.0