__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0-only use File::Basename; use Math::BigInt; use Getopt::Long; # Copyright 2008, Intel Corporation # # This file is part of the Linux kernel # # Authors: # Arjan van de Ven <[email protected]> my $cross_compile = ""; my $vmlinux_name = ""; my $modulefile = ""; # Get options Getopt::Long::GetOptions( 'cross-compile|c=s' => \$cross_compile, 'module|m=s' => \$modulefile, 'help|h' => \&usage, ) || usage (); my $vmlinux_name = $ARGV[0]; if (!defined($vmlinux_name)) { my $kerver = `uname -r`; chomp($kerver); $vmlinux_name = "/lib/modules/$kerver/build/vmlinux"; print "No vmlinux specified, assuming $vmlinux_name\n"; } my $filename = $vmlinux_name; # Parse the oops to find the EIP value my $target = "0"; my $function; my $module = ""; my $func_offset = 0; my $vmaoffset = 0; my %regs; sub parse_x86_regs { my ($line) = @_; if ($line =~ /EAX: ([0-9a-f]+) EBX: ([0-9a-f]+) ECX: ([0-9a-f]+) EDX: ([0-9a-f]+)/) { $regs{"%eax"} = $1; $regs{"%ebx"} = $2; $regs{"%ecx"} = $3; $regs{"%edx"} = $4; } if ($line =~ /ESI: ([0-9a-f]+) EDI: ([0-9a-f]+) EBP: ([0-9a-f]+) ESP: ([0-9a-f]+)/) { $regs{"%esi"} = $1; $regs{"%edi"} = $2; $regs{"%esp"} = $4; } if ($line =~ /RAX: ([0-9a-f]+) RBX: ([0-9a-f]+) RCX: ([0-9a-f]+)/) { $regs{"%eax"} = $1; $regs{"%ebx"} = $2; $regs{"%ecx"} = $3; } if ($line =~ /RDX: ([0-9a-f]+) RSI: ([0-9a-f]+) RDI: ([0-9a-f]+)/) { $regs{"%edx"} = $1; $regs{"%esi"} = $2; $regs{"%edi"} = $3; } if ($line =~ /RBP: ([0-9a-f]+) R08: ([0-9a-f]+) R09: ([0-9a-f]+)/) { $regs{"%r08"} = $2; $regs{"%r09"} = $3; } if ($line =~ /R10: ([0-9a-f]+) R11: ([0-9a-f]+) R12: ([0-9a-f]+)/) { $regs{"%r10"} = $1; $regs{"%r11"} = $2; $regs{"%r12"} = $3; } if ($line =~ /R13: ([0-9a-f]+) R14: ([0-9a-f]+) R15: ([0-9a-f]+)/) { $regs{"%r13"} = $1; $regs{"%r14"} = $2; $regs{"%r15"} = $3; } } sub reg_name { my ($reg) = @_; $reg =~ s/r(.)x/e\1x/; $reg =~ s/r(.)i/e\1i/; $reg =~ s/r(.)p/e\1p/; return $reg; } sub process_x86_regs { my ($line, $cntr) = @_; my $str = ""; if (length($line) < 40) { return ""; # not an asm istruction } # find the arguments to the instruction if ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/) { $lastword = $1; } else { return ""; } # we need to find the registers that get clobbered, # since their value is no longer relevant for previous # instructions in the stream. $clobber = $lastword; # first, remove all memory operands, they're read only $clobber =~ s/\([a-z0-9\%\,]+\)//g; # then, remove everything before the comma, thats the read part $clobber =~ s/.*\,//g; # if this is the instruction that faulted, we haven't actually done # the write yet... nothing is clobbered. if ($cntr == 0) { $clobber = ""; } foreach $reg (keys(%regs)) { my $clobberprime = reg_name($clobber); my $lastwordprime = reg_name($lastword); my $val = $regs{$reg}; if ($val =~ /^[0]+$/) { $val = "0"; } else { $val =~ s/^0*//; } # first check if we're clobbering this register; if we do # we print it with a =>, and then delete its value if ($clobber =~ /$reg/ || $clobberprime =~ /$reg/) { if (length($val) > 0) { $str = $str . " $reg => $val "; } $regs{$reg} = ""; $val = ""; } # now check if we're reading this register if ($lastword =~ /$reg/ || $lastwordprime =~ /$reg/) { if (length($val) > 0) { $str = $str . " $reg = $val "; } } } return $str; } # parse the oops while (<STDIN>) { my $line = $_; if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { $target = $1; } if ($line =~ /RIP: 0010:\[\<([a-z0-9]+)\>\]/) { $target = $1; } if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+0x([0-9a-f]+)\/0x[a-f0-9]/) { $function = $1; $func_offset = $2; } if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+0x([0-9a-f]+)\/0x[a-f0-9]/) { $function = $1; $func_offset = $2; } # check if it's a module if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { $module = $3; } if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { $module = $3; } parse_x86_regs($line); } my $decodestart = Math::BigInt->from_hex("0x$target") - Math::BigInt->from_hex("0x$func_offset"); my $decodestop = Math::BigInt->from_hex("0x$target") + 8192; if ($target eq "0") { print "No oops found!\n"; usage(); } # if it's a module, we need to find the .ko file and calculate a load offset if ($module ne "") { if ($modulefile eq "") { $modulefile = `modinfo -F filename $module`; chomp($modulefile); } $filename = $modulefile; if ($filename eq "") { print "Module .ko file for $module not found. Aborting\n"; exit; } # ok so we found the module, now we need to calculate the vma offset open(FILE, $cross_compile."objdump -dS $filename |") || die "Cannot start objdump"; while (<FILE>) { if ($_ =~ /^([0-9a-f]+) \<$function\>\:/) { my $fu = $1; $vmaoffset = Math::BigInt->from_hex("0x$target") - Math::BigInt->from_hex("0x$fu") - Math::BigInt->from_hex("0x$func_offset"); } } close(FILE); } my $counter = 0; my $state = 0; my $center = -1; my @lines; my @reglines; sub InRange { my ($address, $target) = @_; my $ad = "0x".$address; my $ta = "0x".$target; my $delta = Math::BigInt->from_hex($ad) - Math::BigInt->from_hex($ta); if (($delta > -4096) && ($delta < 4096)) { return 1; } return 0; } # first, parse the input into the lines array, but to keep size down, # we only do this for 4Kb around the sweet spot open(FILE, $cross_compile."objdump -dS --adjust-vma=$vmaoffset --start-address=$decodestart --stop-address=$decodestop $filename |") || die "Cannot start objdump"; while (<FILE>) { my $line = $_; chomp($line); if ($state == 0) { if ($line =~ /^([a-f0-9]+)\:/) { if (InRange($1, $target)) { $state = 1; } } } if ($state == 1) { if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) { my $val = $1; if (!InRange($val, $target)) { last; } if ($val eq $target) { $center = $counter; } } $lines[$counter] = $line; $counter = $counter + 1; } } close(FILE); if ($counter == 0) { print "No matching code found \n"; exit; } if ($center == -1) { print "No matching code found \n"; exit; } my $start; my $finish; my $codelines = 0; my $binarylines = 0; # now we go up and down in the array to find how much we want to print $start = $center; while ($start > 1) { $start = $start - 1; my $line = $lines[$start]; if ($line =~ /^([a-f0-9]+)\:/) { $binarylines = $binarylines + 1; } else { $codelines = $codelines + 1; } if ($codelines > 10) { last; } if ($binarylines > 20) { last; } } $finish = $center; $codelines = 0; $binarylines = 0; while ($finish < $counter) { $finish = $finish + 1; my $line = $lines[$finish]; if ($line =~ /^([a-f0-9]+)\:/) { $binarylines = $binarylines + 1; } else { $codelines = $codelines + 1; } if ($codelines > 10) { last; } if ($binarylines > 20) { last; } } my $i; # start annotating the registers in the asm. # this goes from the oopsing point back, so that the annotator # can track (opportunistically) which registers got written and # whos value no longer is relevant. $i = $center; while ($i >= $start) { $reglines[$i] = process_x86_regs($lines[$i], $center - $i); $i = $i - 1; } $i = $start; while ($i < $finish) { my $line; if ($i == $center) { $line = "*$lines[$i] "; } else { $line = " $lines[$i] "; } print $line; if (defined($reglines[$i]) && length($reglines[$i]) > 0) { my $c = 60 - length($line); while ($c > 0) { print " "; $c = $c - 1; }; print "| $reglines[$i]"; } if ($i == $center) { print "<--- faulting instruction"; } print "\n"; $i = $i +1; } sub usage { print <<EOT; Usage: dmesg | perl $0 [OPTION] [VMLINUX] OPTION: -c, --cross-compile CROSS_COMPILE Specify the prefix used for toolchain. -m, --module MODULE_DIRNAME Specify the module filename. -h, --help Help. EOT exit; }
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| atomic | Folder | 0755 |
|
|
| basic | Folder | 0755 |
|
|
| clang-tools | Folder | 0755 |
|
|
| coccinelle | Folder | 0755 |
|
|
| dtc | Folder | 0755 |
|
|
| dummy-tools | Folder | 0755 |
|
|
| gcc-plugins | Folder | 0755 |
|
|
| gdb | Folder | 0755 |
|
|
| gendwarfksyms | Folder | 0755 |
|
|
| genksyms | Folder | 0755 |
|
|
| include | Folder | 0755 |
|
|
| ipe | Folder | 0755 |
|
|
| kconfig | Folder | 0755 |
|
|
| ksymoops | Folder | 0755 |
|
|
| mod | Folder | 0755 |
|
|
| package | Folder | 0755 |
|
|
| selinux | Folder | 0755 |
|
|
| tracing | Folder | 0755 |
|
|
| .gitignore | File | 239 B | 0644 |
|
| Kbuild.include | File | 9.88 KB | 0644 |
|
| Kconfig.include | File | 3.27 KB | 0644 |
|
| Lindent | File | 502 B | 0755 |
|
| Makefile | File | 2.08 KB | 0644 |
|
| Makefile.asm-headers | File | 3.38 KB | 0644 |
|
| Makefile.autofdo | File | 808 B | 0644 |
|
| Makefile.btf | File | 1.13 KB | 0644 |
|
| Makefile.build | File | 16.76 KB | 0644 |
|
| Makefile.clang | File | 1.66 KB | 0644 |
|
| Makefile.clean | File | 1.88 KB | 0644 |
|
| Makefile.compiler | File | 3.49 KB | 0644 |
|
| Makefile.debug | File | 1.36 KB | 0644 |
|
| Makefile.defconf | File | 1.04 KB | 0644 |
|
| Makefile.dtbinst | File | 1.03 KB | 0644 |
|
| Makefile.dtbs | File | 4.89 KB | 0644 |
|
| Makefile.extrawarn | File | 7.81 KB | 0644 |
|
| Makefile.gcc-plugins | File | 2.59 KB | 0644 |
|
| Makefile.headersinst | File | 2.88 KB | 0644 |
|
| Makefile.host | File | 6.02 KB | 0644 |
|
| Makefile.kasan | File | 3.67 KB | 0644 |
|
| Makefile.kcov | File | 333 B | 0644 |
|
| Makefile.kcsan | File | 1004 B | 0644 |
|
| Makefile.kmsan | File | 208 B | 0644 |
|
| Makefile.lib | File | 20.62 KB | 0644 |
|
| Makefile.modfinal | File | 2.77 KB | 0644 |
|
| Makefile.modinst | File | 4.04 KB | 0644 |
|
| Makefile.modpost | File | 4.85 KB | 0644 |
|
| Makefile.package | File | 9.27 KB | 0644 |
|
| Makefile.propeller | File | 1.45 KB | 0644 |
|
| Makefile.randstruct | File | 511 B | 0644 |
|
| Makefile.ubsan | File | 984 B | 0644 |
|
| Makefile.userprogs | File | 1.59 KB | 0644 |
|
| Makefile.vdsoinst | File | 1.06 KB | 0644 |
|
| Makefile.vmlinux | File | 3.32 KB | 0644 |
|
| Makefile.vmlinux_o | File | 3.37 KB | 0644 |
|
| as-version.sh | File | 2.03 KB | 0755 |
|
| asn1_compiler.c | File | 35.32 KB | 0644 |
|
| bloat-o-meter | File | 3.77 KB | 0755 |
|
| bootgraph.pl | File | 5.64 KB | 0755 |
|
| bpf_doc.py | File | 33.46 KB | 0755 |
|
| build-version | File | 177 B | 0755 |
|
| cc-can-link.sh | File | 166 B | 0755 |
|
| cc-version.sh | File | 1.36 KB | 0755 |
|
| check-git | File | 298 B | 0755 |
|
| check-sysctl-docs | File | 3.66 KB | 0755 |
|
| check-uapi.sh | File | 15.05 KB | 0755 |
|
| check-variable-fonts.sh | File | 4.65 KB | 0755 |
|
| check_extable.sh | File | 4.93 KB | 0755 |
|
| checkdeclares.pl | File | 1.1 KB | 0755 |
|
| checkincludes.pl | File | 1.94 KB | 0755 |
|
| checkkconfigsymbols.py | File | 15.75 KB | 0755 |
|
| checkpatch.pl | File | 233.11 KB | 0755 |
|
| checkstack.pl | File | 5.96 KB | 0755 |
|
| checksyscalls.sh | File | 7.51 KB | 0755 |
|
| checktransupdate.py | File | 8.91 KB | 0755 |
|
| checkversion.pl | File | 2.16 KB | 0755 |
|
| cleanfile | File | 3.46 KB | 0755 |
|
| cleanpatch | File | 5.06 KB | 0755 |
|
| coccicheck | File | 7.79 KB | 0755 |
|
| config | File | 4.78 KB | 0755 |
|
| const_structs.checkpatch | File | 1.59 KB | 0644 |
|
| decode_stacktrace.sh | File | 8.49 KB | 0755 |
|
| decodecode | File | 4.86 KB | 0755 |
|
| depmod.sh | File | 723 B | 0755 |
|
| dev-needs.sh | File | 6.07 KB | 0755 |
|
| diffconfig | File | 4.12 KB | 0755 |
|
| documentation-file-ref-check | File | 5.67 KB | 0755 |
|
| extract-ikconfig | File | 1.74 KB | 0755 |
|
| extract-module-sig.pl | File | 3.66 KB | 0755 |
|
| extract-sys-certs.pl | File | 3.75 KB | 0755 |
|
| extract-vmlinux | File | 1.66 KB | 0755 |
|
| extract_xc3028.pl | File | 44.62 KB | 0755 |
|
| faddr2line | File | 10.8 KB | 0755 |
|
| file-size.sh | File | 86 B | 0755 |
|
| find-unused-docs.sh | File | 1.27 KB | 0755 |
|
| gcc-x86_32-has-stack-protector.sh | File | 405 B | 0755 |
|
| gcc-x86_64-has-stack-protector.sh | File | 195 B | 0755 |
|
| gen-randstruct-seed.sh | File | 228 B | 0755 |
|
| gen_packed_field_checks.c | File | 1.19 KB | 0644 |
|
| generate_builtin_ranges.awk | File | 15.3 KB | 0755 |
|
| generate_initcall_order.pl | File | 5.95 KB | 0755 |
|
| generate_rust_analyzer.py | File | 6.17 KB | 0755 |
|
| generate_rust_target.rs | File | 8.57 KB | 0644 |
|
| get_abi.pl | File | 25.36 KB | 0755 |
|
| get_dvb_firmware | File | 24.54 KB | 0755 |
|
| get_feat.pl | File | 14.61 KB | 0755 |
|
| get_maintainer.pl | File | 67.87 KB | 0755 |
|
| gfp-translate | File | 2.08 KB | 0755 |
|
| git.orderFile | File | 564 B | 0644 |
|
| head-object-list.txt | File | 1.28 KB | 0644 |
|
| headerdep.pl | File | 3.5 KB | 0755 |
|
| headers_install.sh | File | 2.71 KB | 0755 |
|
| insert-sys-cert.c | File | 13.08 KB | 0644 |
|
| install.sh | File | 1.06 KB | 0755 |
|
| jobserver-exec | File | 2.56 KB | 0755 |
|
| kallsyms.c | File | 17.7 KB | 0644 |
|
| kernel-doc | File | 77.71 KB | 0755 |
|
| ld-version.sh | File | 1.82 KB | 0755 |
|
| leaking_addresses.pl | File | 14.59 KB | 0755 |
|
| link-vmlinux.sh | File | 7.59 KB | 0755 |
|
| macro_checker.py | File | 4.1 KB | 0755 |
|
| make_fit.py | File | 10.45 KB | 0755 |
|
| makelst | File | 808 B | 0755 |
|
| markup_oops.pl | File | 7.92 KB | 0755 |
|
| min-tool-version.sh | File | 630 B | 0755 |
|
| misc-check | File | 509 B | 0755 |
|
| mkcompile_h | File | 642 B | 0755 |
|
| mksysmap | File | 2.01 KB | 0755 |
|
| mkuboot.sh | File | 414 B | 0755 |
|
| module-common.c | File | 480 B | 0644 |
|
| module.lds.S | File | 1.67 KB | 0644 |
|
| modules-check.sh | File | 443 B | 0755 |
|
| nsdeps | File | 1.56 KB | 0644 |
|
| objdiff | File | 2.83 KB | 0755 |
|
| objdump-func | File | 848 B | 0755 |
|
| orc_hash.sh | File | 316 B | 0644 |
|
| pahole-version.sh | File | 269 B | 0755 |
|
| parse-maintainers.pl | File | 4.54 KB | 0755 |
|
| patch-kernel | File | 9.95 KB | 0755 |
|
| profile2linkerlist.pl | File | 414 B | 0755 |
|
| prune-kernel | File | 912 B | 0755 |
|
| recordmcount.c | File | 17.51 KB | 0644 |
|
| recordmcount.h | File | 19.37 KB | 0644 |
|
| recordmcount.pl | File | 17.34 KB | 0755 |
|
| relocs_check.sh | File | 717 B | 0755 |
|
| remove-stale-files | File | 1.08 KB | 0755 |
|
| rust_is_available.sh | File | 10.18 KB | 0755 |
|
| rust_is_available_bindgen_0_66.h | File | 54 B | 0644 |
|
| rust_is_available_bindgen_libclang.h | File | 91 B | 0644 |
|
| rust_is_available_bindgen_libclang_concat.h | File | 69 B | 0644 |
|
| rust_is_available_test.py | File | 20.35 KB | 0755 |
|
| rustc-llvm-version.sh | File | 482 B | 0755 |
|
| rustc-version.sh | File | 598 B | 0755 |
|
| rustdoc_test_builder.rs | File | 3.25 KB | 0644 |
|
| rustdoc_test_gen.rs | File | 9.47 KB | 0644 |
|
| setlocalversion | File | 5.2 KB | 0755 |
|
| show_delta | File | 3.04 KB | 0755 |
|
| sign-file.c | File | 10.4 KB | 0644 |
|
| sorttable.c | File | 22.86 KB | 0644 |
|
| spdxcheck-test.sh | File | 284 B | 0644 |
|
| spdxcheck.py | File | 15.73 KB | 0755 |
|
| spdxexclude | File | 417 B | 0644 |
|
| spelling.txt | File | 35.64 KB | 0644 |
|
| sphinx-pre-install | File | 25.11 KB | 0755 |
|
| split-man.pl | File | 604 B | 0755 |
|
| ssl-common.h | File | 678 B | 0644 |
|
| stackdelta | File | 1.84 KB | 0755 |
|
| stackusage | File | 794 B | 0755 |
|
| subarch.include | File | 658 B | 0644 |
|
| syscall.tbl | File | 16.99 KB | 0644 |
|
| syscallhdr.sh | File | 1.89 KB | 0755 |
|
| syscallnr.sh | File | 1.45 KB | 0755 |
|
| syscalltbl.sh | File | 1.82 KB | 0755 |
|
| tags.sh | File | 11.25 KB | 0755 |
|
| tools-support-relr.sh | File | 726 B | 0755 |
|
| unifdef.c | File | 34.84 KB | 0644 |
|
| ver_linux | File | 2.59 KB | 0755 |
|
| verify_builtin_ranges.awk | File | 9.12 KB | 0755 |
|
| xen-hypercalls.sh | File | 386 B | 0755 |
|
| xz_wrap.sh | File | 3.44 KB | 0755 |
|