Restructured payloads into folders

This commit is contained in:
2020-03-12 12:58:50 -04:00
parent 832009c83c
commit 4553174961
17 changed files with 72 additions and 80 deletions

View File

@@ -1,18 +1,23 @@
set(PL_NAMES
aes_busy
aes_sw_bern
aes_sw_corr
cachelib
exit_usb_task
floppysleep
sync
crypto:aes_busy
crypto:aes_sw_bern
crypto:aes_sw_corr
system:cachelib
system:exit_usb_task
system:init_sys
system:sync
power:floppysleep
)
foreach(NAME ${PL_NAMES})
list(APPEND PL_TARGETS "payload_${NAME}")
list(APPEND PL_SRC_BIN "${CMAKE_CURRENT_LIST_DIR}/payload/src/${NAME}.c")
string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
list(APPEND PL_TARGETS "payload_${NAME_ONLY}")
endforeach(NAME)
message("${PL_TARGETS}")
foreach(TARGET ${PL_TARGETS})
list(APPEND PL_SRC_LIB "${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles/${TARGET}.c")
list(APPEND PL_BIN "${CMAKE_CURRENT_BINARY_DIR}/payload/bin/${TARGET}.bin")
@@ -39,7 +44,7 @@ add_custom_command(TARGET payload POST_BUILD
${CMAKE_CURRENT_BINARY_DIR}/lib_cfiles
${CMAKE_SOURCE_DIR}/c8_remote/include/tool)
add_library(experiments experiments/aes_sw.c
add_library(experiments experiments/crypto.c
experiments/system.c
experiments/power.c)
add_library(host_crypto crypto/aes_sw_impl.c crypto/aes_sw_host.c)

View File

@@ -2,6 +2,7 @@
#include <stdio.h>
#include "tool/command.h"
#include "dev/addr.h"
void usb_task_exit(struct pwned_device *dev)
{
@@ -38,8 +39,7 @@ void usb_task_exit(struct pwned_device *dev)
return;
}
resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0,
1, get_payload_address(dev, PAYLOAD_EXIT_USB_TASK));
resp = execute_payload(dev, PAYLOAD_EXIT_USB_TASK, 0, 0);
if(IS_CHECKM8_FAIL(resp->ret))
{
printf("failed to exit usb task\n");

View File

@@ -19,23 +19,24 @@ set(CMAKE_C_FLAGS "-nostdlib -O")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
foreach(NAME ${PL_NAMES})
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S)
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.S)
else()
add_executable(payload_${NAME} ${CMAKE_CURRENT_LIST_DIR}/payload_entry.S
${CMAKE_CURRENT_LIST_DIR}/payload_entry.c
${CMAKE_CURRENT_LIST_DIR}/src/${NAME}.c)
string(REPLACE ":" "/" SRC_PATH ${NAME})
string(REGEX REPLACE "^[^:]*\\:(.*)$" "\\1" NAME_ONLY ${NAME})
set(SRC_NAME ${NAME}_SRCS)
set(${SRC_NAME} src/payload_entry.S src/payload_entry.c src/${SRC_PATH}.c)
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src/${SRC_PATH}.S)
list(APPEND ${SRC_NAME} src/${SRC_PATH}.S)
endif()
add_custom_command(TARGET payload_${NAME} POST_BUILD
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin
add_executable(payload_${NAME_ONLY} ${${SRC_NAME}})
message(adding payload_${NAME_ONLY})
add_custom_command(TARGET payload_${NAME_ONLY} POST_BUILD
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME_ONLY}.bin
COMMAND ${CMAKE_OBJCOPY}
ARGS -O binary -j .text -j .payload_text
${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME}
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME}.bin)
ARGS -O binary -j .text -j .payload_text -j .payload_data
${CMAKE_CURRENT_BINARY_DIR}/payload_${NAME_ONLY}
${CMAKE_CURRENT_BINARY_DIR}/bin/payload_${NAME_ONLY}.bin)
endforeach(NAME)
add_library(dev_crypto ../crypto/aes_sw_impl.c)

View File

@@ -17,6 +17,6 @@ typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#define PAYLOAD_SECTION __attribute__ ((section (".payload_text")))
#define TEXT_SECTION __attribute__ ((section (".text")))
#define PAYLOAD_DATA __attribute__ ((section (".payload_data")))
#endif //CHECKM8_TOOL_DEV_UTIL_H

View File

@@ -1,53 +0,0 @@
#include "dev/addr.h"
#include "bootrom_func.h"
PAYLOAD_SECTION
void fix_heap()
{
*((unsigned long long *) 0x1801b91a0) = 0x80 / 0x40;
*((unsigned long long *) 0x1801b91a8) = ((0x840u / 0x40) << 2u);
*((unsigned long long *) 0x1801b91b0) = 0x80;
*((unsigned long long *) 0x1801b91b8) = 0;
*((unsigned long long *) 0x1801b9220) = 0x80 / 0x40;
*((unsigned long long *) 0x1801b9228) = ((0x80u / 0x40) << 2u);
*((unsigned long long *) 0x1801b9230) = 0x80;
*((unsigned long long *) 0x1801b9238) = 0;
*((unsigned long long *) 0x1801b92a0) = 0x80 / 0x40;
*((unsigned long long *) 0x1801b92a8) = ((0x80u / 0x40) << 2u);
*((unsigned long long *) 0x1801b92b0) = 0x80;
*((unsigned long long *) 0x1801b92b8) = 0;
__asm__ volatile ("dmb sy");
calc_chksum((unsigned long long *) 0x1801b9180,
(unsigned long long *) 0x1801b91a0,
32,
(unsigned long long *) 0x180080640);
calc_chksum((unsigned long long *) 0x1801b9200,
(unsigned long long *) 0x1801b9220,
32,
(unsigned long long *) 0x180080640);
calc_chksum((unsigned long long *) 0x1801b9280,
(unsigned long long *) 0x1801b92a0,
32,
(unsigned long long *) 0x180080640);
__asm__ volatile ("dmb sy");
check_all_chksums();
}
void entry_sync(unsigned long long *self)
{
fix_heap();
*(ADDR_DFU_RETVAL) = -1;
*(ADDR_DFU_STATUS) = 1;
event_notify((struct event *) ADDR_DFU_EVENT);
dev_free(self);
}
void entry_async(uint64_t *base){}

View File

@@ -0,0 +1,28 @@
#include "dev/addr.h"
#include "bootrom_func.h"
PAYLOAD_SECTION
void entry_sync(uint64_t addr_hook)
{
uint64_t *bs_task_sp = ((uint64_t *) ADDR_BOOTSTRAP_TASK + (0x128 / 8));
uint64_t *bs_task_stack = (uint64_t *) *bs_task_sp;
while(1)
{
if(*bs_task_stack == ADDR_GETDFU_EXIT)
{
*bs_task_stack = addr_hook;
break;
}
bs_task_stack++;
}
*(ADDR_DFU_RETVAL) = -1;
*(ADDR_DFU_STATUS) = 1;
event_notify((struct event *) ADDR_DFU_EVENT);
}
PAYLOAD_SECTION
void entry_async(){}

View File

@@ -0,0 +1,11 @@
void entry_sync()
{
}
void entry_async()
{
}