SR 24 begins at an intersection with US 221 and SR 116 at the southern edge of downtown Roanoke. SR 116 runs north–south along Jefferson Street; US 221 joins SR 116 north on Jefferson Street and heads west on two-lane undivided Elm Avenue. SR 24 heads east along Elm Avenue, which becomes a four-lane
divided boulevard at SR 24's terminus. The state highway intersects Williamson Road and crosses over a rail line before reaching the
diamond interchange at the southern terminus of
Interstate 581 (I-581). US 220 runs concurrently with I-581 north to
I-81 and south solo as the Roy Webber Expressway toward
Rocky Mount. East of I-581 and US 220, SR 24 splits into a
one-way pair that follows Bullitt Avenue eastbound and Jamison Avenue westbound. The two directions come together at 13th Street to form four-lane divided Dale Avenue, along which the state highway crosses over a rail line and Tinker Creek to leave the city of Roanoke. SR 24 continues through the town of
Vinton in
Roanoke County as Virginia Avenue, which bypasses the center of town to the south. At Chestnut Street, the four-lane divided boulevard transitions onto Hardy Road; when Hardy Road continues east, SR 24 curves north as Bypass Road, which ends at Washington Avenue, the main street of Vinton. The state highway heads east along Washington Avenue to the town limit of Vinton at Wolf Creek. SR 24 has an interchange with the
Blue Ridge Parkway at a low gap in the
Blue Ridge Mountains between Stewart Knob and Chestnut Mountain immediately before the highway enters Bedford County, where its name changes to Stewartsville Road. The state highway remains a four-lane divided highway to just east of
Stewartsville. SR 24 continues east as a two-lane undivided road through the southern Bedford County community of
Chamblissburg and
Meads Store. SR 24 crosses Goose Creek shortly before intersecting
SR 122 (Moneta Road) west of the hamlet of
Body Camp. The state highway continues east as Shingle Block Road to its western intersection with
SR 43 (Virginia Byway). SR 24 and SR 43 continue east along Glenwood Drive to their split at
Gillespie, where SR 43 heads south as Leesville Road. SR 24 continues northeast as Wyatts Way, which enters Campbell County in the middle of its curvaceous course between its crossing of the
Big Otter River and the village of
Evington. The state highway, now named Colonial Highway, intersects
US 29 (Wards Road) at
Yellow Branch on its way to
Rustburg, which sits at the southern end of Long Mountain. SR 24 runs concurrently through the
county seat with
US 501, which heads south as Brookneal Highway toward
Brookneal and north as Campbell Highway toward
Lynchburg. SR 24 continues northeast as Village Highway to
Concord, where the state highway joins US 460 (Richmond Highway). The four-lane divided highway immediately enters
Appomattox County, where the two highways pass through
Spout Spring on their way to the county seat of Appomattox. US 460 and SR 24 have a diamond interchange with
US 460 Business and the south end of
SR 26 (Oakville Road) on the northwest side of the town. SR 24 and US 460 diverge at the following diamond interchange with Old Courthouse Road, which heads south toward the
Appomattox Historic District as
SR 131. SR 24 heads northeast as a two-lane undivided road through Appomattox Court House National Historical Park, within which the highway crosses the headwaters of the
Appomattox River. The state highway heads through the hamlet of
Vera and passes through sections of
Appomattox-Buckingham State Forest as the highway enters
Buckingham County and becomes named Mt. Rush Highway. SR 24 passes through
Sliders and crosses the upper reaches of the
Slate River before reaching its eastern terminus at US 60 (James Anderson Highway) in Mt. Rush. ==Major intersections==