Bangladesh, who lost the two previous Tests by innings margins, brought in middle-order batsman Tushar Imran and left-arm seamer Syed Rasel in place of Mehrab Hossain and Mohammad Sharif.
Sri Lanka, seeking a 3-0 sweep, recalled opener Upul Tharanga and new-ball bowlers Farveez Maharoof and Sujeewa de Silva on a seamer-friendly Asgiriya stadium wicket.
The trio replaced Chaminda Vaas, who has returned to his English county Middlesex, opener Malinda Warnapura and fast bowler Dilhara Fernando.
Bangladesh: Mohammad Ashraful (capt), Shahriar Nafees, Javed Omar, Rajin Saleh, Habibul Bashar, Tushar Imran, Mushfiqur Rahim, Mashrafe Mortaza, Shahadat Hossain, Mohammed Rafique, Syed Rasel. 12th man: Shakib-Al Hasan.
Sri Lanka: Mahela Jayawardene (capt), Upul Tharanga, Michael Vandort, Kumar Sangakkara, Chamara Silva, Tillakaratne Dilshan, Prasanna Jayawardene, Farveez Maharoof, Muttiah Muralitharan, Lasith Malinga, Sujeewa De Silva. 12th man: Malinga Bandara.
Umpires: Rudi Koertzen (RSA) and Suresh Shastri (IND), TV umpire: Ranmore Martinez (SRI)
Match referee: Jeff Crowe (NZL)